我们这里使用hibernate-validator作为对象参数验证器,所以在正式介绍SpringBoot参数验证之前,需要先简单了解一下hibernate-validator的使用。
hibernate-validator基本使用
引入依赖
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.17.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
编写需要验证对象
验证要求 person对象的用户名不能为空,年龄在1-150岁之间。
@Data
public class Person {
@NotBlank(message = "username must not be null")
private String username;
@Min(value = 1, message = "age must be >= 1")
@Max(value = 150, message = "age must be < 150")
private Integer age;
}
验证对象属性是否符合要求
/**
* 对象验证器
*/
public Validator validator() {
ValidatorFactory validatorFactory =
Validation
.byProvider(HibernateValidator.class)
.configure()
// 验证属性时,如果有一个验证不通过就返回,不需要验证所有属性
.addProperty("hibernate.validator.fail_fast", "true")
.buildValidatorFactory();
return validatorFactory.getValidator();
}
@Test
public void test() throws Exception {
Person person = new Person();
Set<ConstraintViolation<Person>> validate = validator().validate(person);
validate.forEach(errorParam -> {
System.out.println(errorParam.getMessage());
});
}
- 我们只需要验证的对象实例即可完成对象验证,如果验证成功,那么返回一个空的集合,如果验证失败,会返回具体的验证失败的属性信息。
- 我们输出验证失败的错误信息如下:
username must not be null
验证规则
validator提供了大量的验证注解供我们使用,主要以下几类:
空/非空验证
@Null
元素必须为