一、介绍
- 验证不通过则抛异常,方便异常中心统一处理,异常的的message等于属性注解的message,属性注解的message默认为:“不能为空、小于…”
二、依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
三、注解
1、属性注解
注解 | 含义 |
---|
@Null | 只能为null |
@NotNull | 不能为null |
@NotEmpty | 校验字符串、集合、map、JSONObject不能为null并且不能empty |
@NotBlank | 只能验证字符串,不为null、去除首尾空白字符后不能为empty |
@Size(min=11,max=11,message=“长度必须在1至11之间”) | 校验字符串、数组、集合、Map,长度必须在min ~ max之间,min缺省0,max缺省2147483647 |
@AssertFalse | 只能为false |
@AssertTrue | 只能为true |
@Max(value=10L,message=“必须小于等于10”) | 必须是一个数字,只能<=指定的数值 |
@Min(value=1L,message=“必须大于等于1”) | 必须是一个数字,只能>=指定的数值 |
@DecimalMax(value) | 必须是一个数字,只能<=指定的数值,支持的数据类型:BigDecimal、BigInteger、CharSequence、byte、short、int、long及其包装类 |
@DecimalMin(value=“1”,message=“必须大于等于1”) | 必须是一个数字,只能>=指定的数值,支持的数据类型同上 |
@NegativeOrZero | 必须为负数或0 |
@PositiveOrZero | 必须为正数或0 |
@Future | 必须是将来日期时间 |
@FutureOrPresent | 必须是现在或将来的日期时间 |
@Past | 必须是过去的日期时间,可用来校验生日 |
@PastOrPresent | 必须是过去或现在的日期时间 |
@Pattern(value) | 符合指定的正则表达式 |
@Email | 符合email格式 |
2、注解
- @Validated
- 可以用在类上、方法和方法参数上,但是不能用在成员属性上
- 提供了一个分组功能,可动态校验属性
- @Valid
四、举例
1、实体类属性校验
public class User{
@NotBlank(message="姓名不能为空")
@Size(min=1,max=11,message="姓名的长度必须在1至11之间")
private String name;
}
@PostMapping
public void add(@RequestBody @Validated User user){
}
@GetMapping
public void list(@Validated User user){
}
2、方法参数校验
@Validated
public class QteQuestionnaireController{
@GetMapping
public void list(@NotNull(message="年龄不能为空") @DecimalMin("1") Integer age){
}
}
3、属性动态校验
public interface EditGroup extends Default {
}
public class User{
@NotNull(groups=EditGroup.class,message="姓名不能为空")
private Integer id;
}
@PostMapping
public void add(@RequestBody @Validated User user){
}
@PostMapping
public void edit(@RequestBody @Validated(EditGroup.class) User user){
}