知识点与用法
1. @Validated和@Valid的区别
区别 | @Valid注解 | @Validated注解 |
提供者 | JSR-303规范 | Spring |
是否支持分组 | 不支持 | 支持 |
标注位置 | METHOD, FIELD, CONSTRUCTOR, PARAMETER, TYPE_USE | TYPE, METHOD, PARAMETER |
嵌套校验 | 支持 | 不支持 |
2. 依赖导入
使用SpringBoot整合 – 本文所有代码只引入下面两个依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
<!--如果spring-boot版本小于2.3.x,引入spring-boot-starter-web即可,hibernate-validator将被自动引入-->
<!--如果spring-boot版本大于2.3.x,引入spring-boot-starter-web、hibernate-validator-->
本质依赖
<!--数据校验api接口-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>xxx</version>
</dependency>
<!--数据校验api实现-->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>xxx</version>
</dependency>
<!--hibernate-validator只不过是一堆数据校验接口的实现类,和数据库没有半点关系-->
3. 常用数据校验注解
// JSR提供的校验注解:
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
// Hibernate Validator提供的校验注解:
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
实践积累
校验嵌套的List属性,必须要使用@Valid,不能使用@Validated,@Validated不能校验属性。
如果需要分组校验那控制层参数必须同时加上@Valid 和 @Validated 不然接受参数的类中的List集合数据无法校验
2. 校验List中的每个对象
参考: https://blog.csdn.net/weixin_43990804/article/details/112974137