使用validator类进行验证:
第一步:在pom中导入其依赖:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
第二步:首先定义一个校验结果类,用于返回校验结果
该结果类中有一个变量(布尔类型),根据该变量确定是否有错误,通过方法isHasError(),返回这个变量;定义了一个map集合,存放错误,实现了一个获取错误信息的方法getErrmsg()
public class ValidationResult {
//校验结果是否有错
private boolean hasErrors=false;
//存放错误信息的map
private Map<String,String> errorMsgMap=new HashMap<>();
public boolean isHasErrors() {
return hasErrors;
}
public void setHasErrors(boolean hasErrors) {
this.hasErrors = hasErrors;
}
public Map<String, String> getErrorMsgMap() {
return errorMsgMap;
}
public void setErrorMsgMap(Map<String, String> errorMsgMap) {
this.errorMsgMap = errorMsgMap;
}
//实现通用的通过格式化字符串信息获取错误结果的msg方法
public String getErrMsg(){
return StringUtils.join(errorMsgMap.values().toArray(),",");
}
第三步:定义一个校验的实现类,该类实现了InitializingBean接口,该接口中有一个抽象方法,用户z哎容器创建实例化对象,并且对其属性进行赋值完成后执行。
public interface InitializingBean {
void afterPropertiesSet() throws Exception;
}
校验类的返回值是检验结果类,在validate方法中实现校验逻辑,如果不满足校验规则,就把错误信息放入到结果类中的集合中。
校验规则在具体的类上指定,这个方法只要拿到这个类就行了validator.validate(bean);然后这个方法底层会去进行校验,把结果直接返回给我们,我们再判断结果是过中是否有错误,有的话把错误存放入结果类的结合中。最后返回校验方法的的返回值。
@Component
public class ValidatorImpl implements InitializingBean {
private Validator validator;
//实现校验方法并返回校验结果
public ValidationResult validate(Object bean){
ValidationResult result=new ValidationResult();
//若对应的bean里面的参数规则违背了validation定义的annotion定义的话,constraViolationSet里面将存放这些错误信息
Set<ConstraintViolation<Object>> constraViolationSet=validator.validate(bean);
if(constraViolationSet.size()>0){
//有错误
result.setHasErrors(true);
//遍历constraViolationSet,获取异常信息
constraViolationSet.forEach(constraintViolation->{
String errMsg=constraintViolation.getMessage();
String propertyName=constraintViolation.getPropertyPath().toString();
result.getErrorMsgMap().put(propertyName,errMsg);
});
}
return result;
}
//当spring bean初始化完成之后会回调对应ValidatorImpl的afterPropertiesSet()方法
@Override
public void afterPropertiesSet() throws Exception {
//将hibernate validator通过工厂的初始化方法使其实例化
this.validator=Validation.buildDefaultValidatorFactory().getValidator();
}
}
注意:validator的实例化是在InitializingBean接口的afterPropertiesSet()中完成的,这个方法会在spring bean初始化完成后执行。
第四步:
在需要校验的类上添加校验的注解:
public class UserModel {
private Integer id;
@NotBlank(message = “用户名不能为空”)
private String name;
@NotNull(message = “性别不能不填”)
private Integer gender;
@NotNull(message = “年龄不能不填”)
@Min(value = 0,message = “年龄必须大于0”)
@Max(value = 150,message = “年龄不能超过150”)
private Integer age;
@NotBlank(message = “手机号不能为空”)
private String telephone;
private String registerMode;
private String thirdPartyId;
@NotBlank(message = “密码不能为空”)
private String encryptPassword;
。。。。。。
}
这个validation类的理论补充:(来源于网络)
约束性注解(简单)说明
注解
功能
@AssertFalse
可以为null,如果不为null的话必须为false
@AssertTrue
可以为null,如果不为null的话必须为true
@DecimalMax
设置不能超过最大值
@DecimalMin
设置不能超过最小值
@Digits
设置必须是数字且数字整数的位数和小数的位数必须在指定范围内
@Future
日期必须在当前日期的未来
@Past
日期必须在当前日期的过去
@Max
最大不得超过此最大值
@Min
最大不得小于此最小值
@NotNull
不能为null,可以是空
@Null
必须为null
@Pattern
必须满足指定的正则表达式
@Size
集合、数组、map等的size()值必须在指定范围内
@Email
必须是email格式
@Length
长度必须在指定范围内
@NotBlank
字符串不能为null,字符串trim()后也不能等于“”
@NotEmpty
不能为null,集合、数组、map等size()不能为0;字符串trim()后可以等于“”
@Range
值必须在指定范围内
@URL
必须是一个URL
注:此表格只是简单的对注解功能的说明,并没有对每一个注解的属性进行说明;可详见源码。
原文链接:https://blog.csdn.net/justry_deng/article/details/86571671