美文网首页
04.`validator`数据校验→`jsr303`

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

作者: 风安峻_ | 来源:发表于2020-09-05 08:12 被阅读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);
          }
      }
      

    相关文章

      网友评论

          本文标题:04.`validator`数据校验→`jsr303`

          本文链接:https://www.haomeiwen.com/subject/iartektx.html