引入中间件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
约束性注解(简单)说明
注解 | 功能 |
---|---|
@AssertFalse | 可以为null,如果不为null的话必须为false |
@AssertTrue | 可以为null,如果不为null的话必须为true |
@DecimalMax | 设置不能超过最大值 |
@DecimalMin | 设置不能超过最小值 |
@Digits | 设置必须是数字且数字整数的位数和小数的位数必须在指定范围内 |
@Future | 日期必须在当前日期的未来 |
@Past | 日期必须在当前日期的过去 |
@Max | 最大不得超过此最大值 |
@Min | 最大不得小于此最小值 |
@NotNull | 不能为null,可以是空 |
@Null | 必须为null |
@Pattern | 必须满足指定的正则表达式 |
@Size | 集合、数组、map等的size()值必须在指定范围内 |
必须是email格式 | |
@Length | 长度必须在指定范围内 |
@NotBlank | 字符串不能为null,字符串trim()后也不能等于“” |
@NotEmpty | 不能为null,集合、数组、map等size()不能为0;字符串trim()后可以等于“” |
@Range | 值必须在指定范围内 |
@URL | 必须是一个URL |
例子:@NotEmpty
在实体类里使用
public class Admin implements Serializable {
// message 为验证不通过的报错信息
@NotEmpty(message = "密码格式不能为空!")
private String password;
......
}
例子:@Min
在实体类里使用
public class Admin implements Serializable {
// message 为验证不通过的报错信息
@Min(message = "密码格式不能为空!",value = 18)
private Intnger age;
......
}
例子:@Pattern
在实体类里使用
public class Admin implements Serializable {
// message 为验证不通过的报错信息
@Pattern(message = "姓名格式不正确!",regexp = "^[A-Za-z0-9\u4e00-\u9fa5]+$")
private String fullName;
......
}
使用
@Validated和@Valid的区别
@Validated | @Valid | |
---|---|---|
分组 | 提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制。 没有添加分组属性时,默认验证没有分组的验证属性 |
作为标准JSR-303规范,还没有吸收分组的功能 |
注解地方 | 可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上 | 可以用在方法、构造函数、方法参数和成员属性(字段)上 |
嵌套验证 | 用在方法入参上无法单独提供嵌套验证功能。 不能用在成员属性(字段)上,也无法提示框架进行嵌套验证。 能配合嵌套验证注解@Valid进行嵌套验证。 |
用在方法入参上无法单独提供嵌套验证功能。 能够用在成员属性(字段)上,提示验证框架进行嵌套验证。 能配合嵌套验证注解@Valid进行嵌套验证。 |
使用验证流程
- 在实体类里定