小工具知识网

当前位置: 首页 > 行业知识 > Springboot @Validated注解详细说明

行业知识

Springboot @Validated注解详细说明

2026-11-10 21:45:09 来源:互联网转载

在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)参数值为时间,且必须大于或等于 当前日期
@Datapublic 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 注解就可以实现嵌套检验

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

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

  • 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上直接放校验注解

上一篇:ps怎么批量导出?

下一篇:手机怎么开语音服务器?