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

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校验

    注解修饰类型说明
    @AssertFalseboolean校验boolean类型必须为false
    @AssertTrueboolean校验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);
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值