Spring Boot Validate
Spring Boot 支持JSR303/JSR349验证框架,通过注解实现对参数的校验,并将校验结果封装成BindingResult对象。
常用注解
下面的表格列出常用校验类及主要功能。这些注解必须配合@Valid或@Validated使用,通过这两个注解开启校验。
检查类型 | 注解 | 说明 |
---|---|---|
空检查 | @Null | 验证对象为null |
@NotNull | 验证对象不为null | |
@NotEmpty | 验证对象不为null、且长度>0 | |
@NotBlank | 验证字符串不为null、且最少有一个非空格字符 | |
长度检查 | @Size(min,max) | 验证对象长度 |
@Length(min,max) | 验证字符串长度 | |
数值检查 | @Min(value) | 验证数字>=value |
@Max(value) | 验证数字<=value | |
@Digits(integer,fraction) | 验证数字格式 | |
@Range(min,max) | 验证数字是否符合[min,max] | |
正则检查 | @Pattern(regexp) | 验证字符串是否符合正则表达式 |
验证是否邮箱格式 |
注 :对于长度的校验基本都支持字符串、集合、Map、数组的长度。
下面是@Valid和@Validated的区别。
@Valid | @Validated | |
---|---|---|
分组校验 | 不支持 | 支持 |
使用范围 | 方法、属性、构造方法、参数 | 类、方法、参数 |
嵌套验证 | 支持 | 不支持 |
注 :嵌套验证。JavaBean a中某个属性类型是JavaBean b,对a进行验证的同时验证b。
使用说明
基本使用
以新增用户为例
新建User类,为name属性添加@NotBlank注解
@Data
class User {
private Integer id;
@NotBlank
private String name;
}
新增新建用户接口,添加@Validated注解开启user参数校验
@RestController
@RequestMapping("/validate")
public class ValidateController {
@RequestMapping("/addUser")
public Integer addUser(@Validated User user) {
// 假设插入数据库后,生成id为89757
user.setId(89757);
// 插入成功后返回id
return user.getId();
}
}
启动服务,测试代码
浏览器输入 :http://localhost:8080/validate/addUser
由于name是null,校验不通过,返回错误
浏览器输入 :http://localhost:8080/validate/addUser?name=ly
校验通过,返回89757
实现分组校验
同一个JavaBean在不同的场景可能需要不用的校验规则,例如:添加用户时id必须是null,修改用户时id不能是null。每一个校验注解都有group属性,通过group属性可以实现不同方法采用不同的校验规则。以新建用户为例
修改User类,添加并指定校验组
@Data
class User {