这么写参数校验(Validator)就不会被劝退了~

作者:微信小助手

发布时间:2019-10-06T10:04:53


扫描下方二维码试读


  • 为什么要用validator

  • 实战演练

  • 自定义参数注解

  • 总结


很痛苦遇到大量的参数进行校验,在业务中还要抛出异常或者不断的返回异常时的校验信息,在代码中相当冗长, 充满了if-else这种校验代码

今天我们就来学习spring的javax.validation 注解式参数校验.

为什么要用validator

  1. javax.validation的一系列注解可以帮我们完成参数校验,免去繁琐的串行校验

不然我们的代码就像下面这样:

 //  http://localhost:8080/api/user/save/serial

    /**
     * 走串行校验
     *
     * @param userVO
     * @return
     */

    @PostMapping("/save/serial")
    public Object save(@RequestBody UserVO userVO) {
        String mobile = userVO.getMobile();

        //手动逐个 参数校验~ 写法
        if (StringUtils.isBlank(mobile)) {
            return RspDTO.paramFail("mobile:手机号码不能为空");
        } else if (!Pattern.matches("^[1][3,4,5,6,7,8,9][0-9]{9}$", mobile)) {
            return RspDTO.paramFail("mobile:手机号码格式不对");
        }

        //抛出自定义异常等~写法
        if (StringUtils.isBlank(userVO.getUsername())) {
            throw new BizException(Constant.PARAM_FAIL_CODE, "用户名不能为空");
        }

        // 比如写一个map返回
        if (StringUtils.isBlank(userVO.getSex())) {
            Map<StringObject> result = new HashMap<>(5);
            result.put("code", Constant.PARAM_FAIL_CODE);
            result.put("msg""性别不能为空");
            return result;
        }
        //.........各种写法 ...
        userService.save(userVO);
        return RspDTO.success();
    }

这被大佬看见,一定说,都9102了还这么写,然后被劝退了…..

  1. 什么是javax.validation

JSR303 是一套JavaBean参数校验的标准,它定义了很多常用的校验注解

我们可以直接将这些注解加在我们JavaBean的属性上面(面向注解编程的时代),就可以在需要校验的时候进行校验了,在SpringBoot中已经包含在starter-web中,再其他项目中可以引用依赖,并自行调整版本:

        
        <dependency>
            <groupId>javax.validationgroupId>
            <artifactId>validation-apiartifactId>
            <version>1.1.0.Finalversion>
        dependency>
        
        <dependency>
            <groupId>org.hibernategroupId>
            <artifactId>hibernate-validatorartifactId>
            <version>5.2.0.Finalversion>
        dependency>

  1. 注解说明

      1.@NotNull:不能为null,但可以为empty(""," ","   ")
      2.@NotEmpty:不能为null,而且长度必须大于0 (" ","  ")
      3.@NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0("test")    即:必须有实际字符


验证注解 验证的数据类型 说明

@AssertFalse

Boolean,boolean

验证注解的元素值是false

@AssertTrue

Boolean,boolean

验证注解的元素值是true