Springboot @Validated注解详细说明

2024-06-04 9052阅读

在Spring Boot中,@Validated注解用于验证请求参数。它可以应用在Controller类或方法上

1、引入依赖

    org.springframework.boot
    spring-boot-starter-validation

2、参数说明与使用示例

注解验证的数据类型描述
@NotNull任意类型验证属性不能为null
@NotBlank字符串验证字符串属性不能为空且长度必须大于0
@Size(min,max )CharSequence

Collection

Map

Array

字符串:字符串长度必须在指定的范围内

Collection:集合大小必须在指定的范围内

Map:map的大小必须在指定的范围内

Array:数组长度必须在指定的范围内

@Min整型类型验证数字属性的最小值
@Max整型类型验证数字属性的最大值
@DecimalMin数字类型验证数字属性的最小值(包括小数)
@DecimalMax数字类型验证数字属性的最大值(包括小数)
@Digits(integer,fraction)数字类型验证数字属性的整数位数和小数位数
@Email字符串类型验证字符串属性是否符合Email格式
@Pattern字符串验证字符串属性是否符合指定的正则表达式
@Positive数字类型验证数值为正数
@PositiveOrZero数字类型验证数值为正数或0
@Negative数字类型验证数值为负数
@NegativeOrZero数字类型验证数值为负数或0
@AssertTrue布尔类型参数值必须为 true
@AssertFalse布尔类型参数值必须为 false
@Past时间类型(Date)参数值为时间,且必须小于 当前时间
@PastOrPresent时间类型(Date)参数值为时间,且必须小于或等于 当前时间
@Future时间类型(Date)参数值为时间,且必须大于 当前时间
@FutureOrPresent时间类型(Date)参数值为时间,且必须大于或等于 当前日期
@Data
public class User {
    // @NotNull:验证属性不能为null。
    @NotNull(message = "用户名不能为null")
    private String username;
    // @NotBlank:验证字符串属性不能为空且长度必须大于0。
    @NotBlank(message = "用户名不能为空且长度必须大于0")
    private String username1;
    // @Size:验证字符串属性的长度范围。
    @Size(min = 6, max = 20,message = "密码最小6位,最长20位")
    private String password;
    // @Min:验证数字属性的最小值。
    @Min(value = 18,message = "年龄最小18岁")
    private int age;
    // @Max:验证数字属性的最大值。
    @Max(100)
    private int age1;
    // @DecimalMin:验证数字属性的最小值(包括小数)。
    @DecimalMin("0.01")
    private BigDecimal price;
    // @DecimalMax:验证数字属性的最大值(包括小数)。
    @DecimalMax("1000.00")
    private BigDecimal price1;
    // @Digits:验证数字属性的整数位数和小数位数。
    @Digits(integer = 3, fraction = 2)
    private BigDecimal weight;
    // @Email:验证字符串属性是否符合Email格式。
    @Email
    private String email;
    // @Pattern:验证字符串属性是否符合指定的正则表达式。
    @Pattern(regexp = "[A-Za-z0-9]+")
    private String username2;
    
    // @Positive:验证数值为正数
    @Positive
    private int age2;
    // @PositiveOrZero:验证数值为正数或0
    @PositiveOrZero
    private int age3;
    // @Negative:验证数值为负数
    @Negative
    private int age4;
    // @NegativeOrZero:验证数值为负数或0
    @NegativeOrZero
    private int age5;
    // @AssertTrue:参数值必须为 true
    @AssertTrue
    private boolean hasMoney;
    // @AssertFalse:参数值必须为 false
    @AssertFalse
    private boolean hasMoney1;
    // @Past:参数值为时间,且必须小于 当前时间
    @Past
    private Date time;
    // @PastOrPresent:参数值为时间,且必须小于或等于 当前时间
    @PastOrPresent
    private Date time1;
    // @Future:参数值为时间,且必须大于 当前时间
    @Future
    private Date time2;
    // @FutureOrPresent:参数值为时间,且必须大于或等于 当前日期
    @FutureOrPresent
    private Date time3;
}

嵌套校验:

在被检验的字段上添加 @Valid 注解就可以实现嵌套检验

@Data
public class User3 {
    @Valid
    List user2List;
    @Valid
    private User2 user2;
}
@Data
 class User2 {
    @NotBlank(message = "用户名不能为空!")
    private String username;
}

3、校验注解的三个参数:

Springboot @Validated注解详细说明 第1张

  • message:自定义错误消息。可以通过该参数指定验证失败时返回的错误消息。

    示例:

    public class User {
        @NotBlank(message = "用户名不能为空")
        private String username;
        
        // getter and setter
    }
    
    • groups:分组校验。可以通过该参数指定在特定的验证分组中才进行验证。

      示例:

      public interface Group1 {}
      public interface Group2 {}
      public class User {
          @NotBlank(groups = Group1.class)
          private String username;
          
          @NotBlank(groups = Group2.class)
          private String password;
          
          // getter and setter
      }
      

      username属性只在Group1分组中进行验证,password属性只在Group2分组中进行验证。

      • payload:用于携带额外的验证信息。可以通过该参数传递一些自定义的验证信息。(不常用)

        示例:

        public class User {
            @NotBlank(payload = {ValidationInfo.class})
            private String username;
            
            // getter and setter
        }
        public class ValidationInfo {
            private String info;
            
            // getter and setter
        }
        

        当验证失败时,可以通过ConstraintViolation对象获取到ValidationInfo对象,并获取其中的验证信息。

        Set violations = validator.validate(user);
        for (ConstraintViolation violation : violations) {
            if (violation.getConstraintDescriptor().getPayload().contains(ValidationInfo.class)) {
                ValidationInfo validationInfo = violation.getConstraintDescriptor().getPayload(ValidationInfo.class);
                String info = validationInfo.getInfo();
                // 处理验证信息
            }
        }
        

        4、在post 和 get 请求上使用

        在post上使用@Validated,get上直接放校验注解

        Springboot @Validated注解详细说明 第2张


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]