0


Springboot @Validated注解详细说明

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

1、引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

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)参数值为时间,且必须大于或等于 当前日期

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

嵌套校验:

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

@DatapublicclassUser3{@ValidList<User2> user2List;@ValidprivateUser2 user2;}@DataclassUser2{@NotBlank(message ="用户名不能为空!")privateString username;}

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

在这里插入图片描述

  • message:自定义错误消息。可以通过该参数指定验证失败时返回的错误消息。 示例:
publicclassUser{@NotBlank(message ="用户名不能为空")privateString username;// getter and setter}
  • groups:分组校验。可以通过该参数指定在特定的验证分组中才进行验证。 示例:
publicinterfaceGroup1{}publicinterfaceGroup2{}publicclassUser{@NotBlank(groups =Group1.class)privateString username;@NotBlank(groups =Group2.class)privateString password;// getter and setter}

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

  • payload:用于携带额外的验证信息。可以通过该参数传递一些自定义的验证信息。(不常用) 示例:
publicclassUser{@NotBlank(payload ={ValidationInfo.class})privateString username;// getter and setter}publicclassValidationInfo{privateString info;// getter and setter}

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

Set<ConstraintViolation<User>> violations = validator.validate(user);for(ConstraintViolation<User> 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上直接放校验注解

在这里插入图片描述

标签: spring boot java

本文转载自: https://blog.csdn.net/qq_48721706/article/details/132132507
版权归原作者 hmb↑ 所有, 如有侵权,请联系我们删除。

“Springboot @Validated注解详细说明”的评论:

还没有评论