一、准备工作
Spring文档:https://docs.spring.io/spring/docs/5.0.1.RELEASE/
JSR规范:http://beanvalidation.org/1.1/spec/
Hibernate Validator文档:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/
Maven依赖:
https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator
https://mvnrepository.com/artifact/org.glassfish/javax.el
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.2.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.0</version>
</dependency>
二、验证类
xml配置:
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
注解配置:
@Bean
public LocalValidatorFactoryBean getValidator() {
return new LocalValidatorFactoryBean();
}
三、Hibernate Validator Constraint 注解
Bean Validation 中内置的 constraint:
@Null 被注释的元素必须为 null
@NotNull 被注释的元素必须不为 null
@AssertTrue 被注释的元素必须为 true
@AssertFalse 被注释的元素必须为 false
@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max=, min=) 被注释的元素的大小必须在指定的范围内
@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内
@Past 被注释的元素必须是一个过去的日期
@Future 被注释的元素必须是一个将来的日期
@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
Hibernate Validator 附加的 constraint
@NotBlank(message =) 验证字符串非null,且长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
四、验证
@Autowired
LocalValidatorFactoryBean localValidatorFactoryBean;
DataBinder验证:
public void checkUser() {
UserEntity userEntity = new UserEntity("txls",919,001);
DataBinder dataBinder = new DataBinder(userEntity);
dataBinder.setValidator(this.localValidatorFactoryBean);
dataBinder.validate();
BindingResult bindingResult = dataBinder.getBindingResult();
if(bindingResult.hasErrors()) {
List<ObjectError> list = bindingResult.getAllErrors();
for(ObjectError objectError : list)
System.out.println(objectError.getCode() + "_" + objectError.getDefaultMessage());
} else {
System.out.println(userEntity);
}
}
localValidatorFactoryBean验证:
public void checkUser() {
Set<ConstraintViolation<UserEntity>> constraintViolationSet = this.localValidatorFactoryBean.validate(userEntity);
if(constraintViolationSet.size()>0) {
for(ConstraintViolation<UserEntity> constraintViolation : constraintViolationSet)
System.out.println(constraintViolation.getMessage());
} else {
System.out.println(userEntity);
}
}