注册页面,优化效验规则

1.在pom.xml文件引入hibernate-validator

   <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>5.2.4.Final</version>
    </dependency>

2.在工程下新加validator目录,新规一个ValidatorResult.java

public class ValidatorResult {
    //校验结果是否有错
    private boolean hasErrors;

    //存放错误信息的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(Arrays.toString(errorMsgMap.values().toArray()) + ",");
    }
}

3.在validator包下,新规一个ValidatorImpl.java

@Component
public class ValidatorImpl implements InitializingBean {

    private Validator validator;

    //实现校验方法并返回校验结果
    public ValidatorResult vlidator(Object bean){
        ValidatorResult validatorResult = new ValidatorResult();
        Set<ConstraintViolation<Object>> constraintViolations = validator.validate(bean);
        if(constraintViolations.size() > 0){
            //有错误
            validatorResult.setHasErrors(true);
            constraintViolations.forEach(constraintViolation->{
                String errMsg = constraintViolation.getMessage();
                String propertyName = constraintViolation.getPropertyPath().toString();
                validatorResult.getErrorMsgMap().put(propertyName,errMsg);
            });
        }
        return validatorResult;
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        //将hibernate validator 通过工厂的初始化方式使其实例化 ==  校验器
        this.validator = Validation.buildDefaultValidatorFactory().getValidator();
    }
}

 3.在model包下的userModel.java,每个字段上方加入注解 @NotBlank(不能为空字符串并且不能为null) @NotNull(不能为null)

    @NotBlank(message = "用户名不能为空")
    private String name;
    @NotNull(message = "性别不能为空")
    private Byte gender;
    @NotNull(message = "年龄不能为空")
    @Min(value = 0,message = "年龄必须大于等于0岁")
    @Max(value = 150,message = "年龄必须小于等于150岁")
    private Integer age;
    @NotNull(message = "手机号不能为空")
    private String telphone;
    private String registerMode;
    private String thirdPartyId;
    @NotNull(message = "密码不能为空")
    private String encrptPassword;

 4.在service下的impl下的UserServiceImpl.java register方法加上

     //校验bean
     ValidatorResult validatorResult = this.validator.vlidator(userModel);
     if(validatorResult.isHasErrors()){
         throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR,validatorResult.getErrMsg());
     }

 

posted @ 2020-06-07 22:12  mandy3651423  阅读(159)  评论(0)    收藏  举报