Hibernate validator
2019-11-23 本文已影响0人
幻影翔
概念
传统
1、验证代码繁琐,重复劳动
2、方法内代码显得冗长
3、每次要看那些参数验证是否完整
4、spring-boot-starter-web包里面含有hibernate-validator包
用处
1、在代码中需要写一些字段校验的代码,比如非空,字段长度。
2、提供了一套比较完整的验证实现方式
校验模式
-
普通模式(默认模式)校验完所有j校验信息后,才返回
-
快速失败返回模式 只要一个校验失败就返回
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class) .configure() .failFast(true) .buildValidatorFactory.getValidator(); Validator validator = validatorFactory.getValidator();
校验注解
@Valid 被注释的元素是一个对象,需要校验此对象的所有字段
@Null 被注释的元素必须为空
@Email
@NotBlank(message="用户名不能为空")
@Past被注释元素的时间必须为过去的日期
@Size(max, min)被注释的元素值的大小必须在指定的范围内
@Min(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最小值
@Pattern(value)指定元素符合正则表达式
其他
对比:@NotNull @NotEmpty @NotBlank
@NotNull 任何对象的value不能为null
@NotEmpty 集合对象的元素不为0,即集合不为空,也可以用于字符串不为null
@NotBlank 只能用于字符串不为null,并且字符串trim()以后length要大于0
使用
public Object add(@Valid User user,BindingResult result){
if(result.hasErrors()){
......
}
throw new RuntimeException(result.getAllErrors().get(0).getDefaulrMessage());
}
校验工具类
public class ValidatorUtils {
private static Validator validator;
static {
validator = Validation.buildDefaultValidatorFactory().getValidator();
}
/**
* 校验对象
* @param object 待校验对象
* @param groups 待校验的组
* @throws RRException 校验不通过,则报RRException异常
*/
public static void validateEntity(Object object, Class<?>... groups)
throws RRException {
Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);
if (!constraintViolations.isEmpty()) {
StringBuilder msg = new StringBuilder();
for(ConstraintViolation<Object> constraint: constraintViolations){
msg.append(constraint.getMessage()).append("<br>");
}
throw new RRException(msg.toString());
}
}
}