秒杀项目基础部分总结-----2(校验)

使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值