04.`validator`数据校验→`jsr303`

2020-09-05  本文已影响0人  风安峻_
1. 依赖
  1. 依赖

    <dependencies>
        <!-- validator 数据校验 -->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>
    </dependencies>
    
  2. spring boot已经集成了validator

2. 常用注解
  1. @Validated@Valid

    • @Validatesd用于标记方法形参,用在形参上无法提供嵌套验证功能,须在形参的成员变量上使用@Valid注解来配合使用。
    • 必须在类上使用@Validated注解标记才可以进行验证,否则所有验证都不会生效
  2. 校验

    注解 修饰类型 说明
    @Null 任何类型 校验对象必须为空
    @NotNUll 任何类型 校验对象不为空,不能校验空字符串
    @NotBlank 字符串 字符串不能为空串
    @NotEmpty 字符串、集合、数组 字符串不能为空串、数组集合长度不为0
  3. boolean校验

    注解 修饰类型 说明
    @AssertFalse boolean 校验boolean类型必须为false
    @AssertTrue boolean 校验boolean类型必须为true
  4. 日期校验

    注解 修饰类型 说明
    @Past 日期 校验的日期对象必须是一个过去的时间
    @Future 日期 校验的日期对象必须是一个未来的时间
  5. 数值校验

    注解 修饰类型 说明
    @Min 数值 校验的数字的值必须指定的值
    @Max 数值 校验的数字的值必须指定的值
    DecimalMin(value = "", inclusive = true) 数值 inclusivetrue时校验的数字要,为false时要
    @DecimalMax(value = "", inclusive = true) 数值 inclusivetrue时校验的数字要,为false时要
    @Digits(integer =, fraction =) 小数 integer指定整数精度fraction指定小数精度
    Length(min = , max = ) 字符串 字符串的长度在minmax之间
    @Size(min = , max = ) 字符串 字符串的长度在minmax之间
    @Range(min = , max = ) 数值 校验的数字的值要在 minmax 之间
  6. 特殊校验

    注解 修饰类型 说明
    @CreditCardNumber 字符串 校验的字符串为信用卡类型
    @URL 字符串 校验的字符串为URL地址
    @Email(regexp = "正则") 字符串 校验的字符串为email邮箱格式
    @Pattern(regexp = "正则") 字符串 校验的字符串是否匹配正则
3. 栗子
  1. 栗子1

    1. controller

      @Validated
      @RestController
      @RequestMapping("/test")
      public class TestController {
          @PostMapping("/test")
          public ResultBean<Object> test(@Validated @RequestBody UserDto userDto) {
              return null;
          }
      }
      
    2. javabean

      1. UserDto-校验参数

        @Data
        @Validated
        public class UserDto implements Serializable {
            @NotEmpty(message = "用户名不能为空")
            private String userName;
            @Pattern(regexp = "^1[3-9][0-9]{9}$", message = "请输入正确的手机号")
            private String userPhone;
            @Email(regexp = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", message = "请正确输入邮箱")
            private String userEmail;
            @Range(min = 1, max = 150, message = "年龄必须在1~150之间")
            private Integer userAge;
            @Past(message = "生日必须是过去的时间")
            private Date userBirthday;
            @Valid
            @NotEmpty(message = "地址不能为空")
            private List<Address> address;
        }
        
      2. Address-被嵌套的元素

        @Data
        @Validated
        public class Address implements Serializable {
            @NotEmpty
            private String province;
            @NotEmpty
            private String city;
            @NotEmpty
            private String area;
            private String address;
        }
        
  2. 栗子2

    @Validated
    @RestController
    @RequestMapping("/login")
    public class LoginController {
        /**
         * 根据邮箱进行注册
         *
         * @param email           邮箱
         * @param password        密码
         * @param confirmPassword 确认密码
         * @return 封装了信息的 JavaBean
         */
        @PostMapping("/registerByEmail")
        public ResultBean<Integer> registerByEmail(@Email(regexp = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$", message = "请正确输入邮箱")
                                                   @RequestParam String email,
                                                   @Pattern(regexp = "[A-Za-z0-9]{6,18}", message = "密码应该由6-18位的数字或字母组成")
                                                   @RequestParam String password,
                                                   @Pattern(regexp = "[A-Za-z0-9]{6,18}", message = "两次密码不一致")
                                                   @RequestParam String confirmPassword) {
            int result = customerService.save(email, password, confirmPassword);
            // 判断是否成功
            return result > 0 ? ResultBean.success(StatusCodeEnum.SUCCESS, result)
                    : ResultBean.error(StatusCodeEnum.REGISTER_ERROR, result);
        }
    }
    
上一篇下一篇

猜你喜欢

热点阅读