作者:吴声子夜歌
原文链接:https://blog.csdn.net/cold___play/article/details/104209719
普通校验
普通检验是基础用法,非常容易,首先需要用户在SpringBootWeb项目中添加数据校验相关的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>查看LocalValidatorFactoryBean类的源码,发现默认的ValidationMessageSource(校验出错时的提示文件) 是resources目录下的ValidationMessages.properties 文件,因此在resources目录下创建ValidationMessages.properties文件,内容如下:
user.name.size=用户名长度介于5到10个字符之间
user.address.notnull=用户地址不能为空
user.age.size=年龄输入不正确
user.email.notnull=邮箱不能为空
user.email.pattern=邮箱格式不正确创建User类,配置数据校验:
public class User {
private Integer id;
@Size(min = 5, max = 10, message = "{user.name.size}")
private String name;
@NotNull(message = "{user.address.notnull}")
private String address;
@DecimalMin(value = "1", message = "{user.age.size}")
@DecimalMax(value = "200", message = "{user.age.size}")
private Integer age;
@Email(message = "{user.email.pattern}")
@NotNull(message = "{user.email.notnull}")
private String email;
//省略getter和setter
}创建UserController:
@RestController
public class UserController {
@PostMapping("/user")
public List<String> addUser(@Validated User user, BindingResult result){
List<String> errors = new ArrayList<>();
if(result.hasErrors()){
List<ObjectError> allErrors = result.getAllErrors();
for(ObjectError error : allErrors){
errors.add(error.getDefaultMessage());
}
}
return errors;
}
}使用Postman测试:
直接访问"/user"接口:

传入用户地址、一个非法邮箱地址以及一个格式不正确的用户名:

分组校验
有的时候,开发者在某一个实体类中定义了很多校验规则,但是在某一次业务处理中,并不需要这么多校验规则,此时就可以使用分组校验:
首先创建两个分组接口:
public interface ValidationGroup1 {
}
public interface ValidationGroup2 {
}在实体类中添加分组信息:
public class User {
private Integer id;
//groups属性,表示该校验属性规则所属的分组
@Size(min = 5, max = 10, message = "{user.name.size}", groups = ValidationGroup1.class)
private String name;
@NotNull(message = "{user.address.notnull}", groups = ValidationGroup2.class)
private String address;
@DecimalMin(value = "1", message = "{user.age.size}")
@DecimalMax(value = "200", message = "{user.age.size}")
private Integer age;
@Email(message = "{user.email.pattern}")
@NotNull(message = "{user.email.notnull}", groups = {ValidationGroup1.class, ValidationGroup2.class})
private String email;
}在@Validated注解中指定校验分组:
@RestController
public class UserController {
//@Validated(ValidationGroup2.class) 表示这里的校验使用ValidationGroup2分组的校验规则,即只校验邮箱地址是否为空、用户地址是否为空
@PostMapping("/user")
public List<String> addUser(@Validated(ValidationGroup2.class) User user, BindingResult result){
List<String> errors = new ArrayList<>();
if(result.hasErrors()){
List<ObjectError> allErrors = result.getAllErrors();
for(ObjectError error : allErrors){
errors.add(error.getDefaultMessage());
}
}
return errors;
}
}测试:

