SpringBoot2 Validator 注册校验

为什么使用Validator

当我们对前端的注册信息进行一个验证的时候,我们要在Service对每一个变量进行一次判断,这样太复杂了,那么就需产生一种格式化的简单的校验方式了。

使用Validator可以通过简单的配置将校验信息返回。

Validator的使用

我们首先要定义一个校验结果返回的类。这个类用来判断信息是否有错,并且将错误信息存储到Map中。

省略setter getter 方法

/**
 * 描述:校验结果
 * @author wangyu
 * @date 2019/5/29
 */

public class ValidationResult {

    //判断校验是否有错
    private boolean hasError = false;

    //存放错误信息的map
    private Map<String,String> errMsgMap = new HashMap<>();

    //格式化字符串信息获得错误结果的msg方法
    public String getErrMsg(){
        return StringUtils.join(errMsgMap.values().toArray(),",");
    }
}

然后通过Spring的工厂对Valiator进行一个初始化。然后写一个接收一个Object对象的方法用来对我们接受的对象进行校验。并将错误信息保存到Map中。

**
 * 描述:对 Validator 进行实例化配置
 * @author wangyu
 * @date 2019/5/29
 */
@Component
public class ValidatorImpl implements InitializingBean {

    private Validator validator;

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

    @Override
    public void afterPropertiesSet() throws Exception {
        //使hibernate validator通过工厂初始化进行实例化
        this.validator = Validation.buildDefaultValidatorFactory().getValidator();
    }
}

最后,将我们要校验的对象的类进行校验的注解绑定。

/**
 * 描述:用户Model层
 * @author wangyu
 * @date 2019/5/22
 */
public class UserModel {
    private Integer id;

    @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;

    @NotBlank(message="密码不能为空")
    private String encrptPassword;
}
我们使用的时候只需要调用Validator方法即可。

ValidationResult validationResult = validator.validate(userModel);
        if (validationResult.isHasError()){
            throw new BusinessException(EmBusinessError.PARAMETER_VALIDATION_ERROR,validationResult.getErrMsg());
        }

先进行校验信息的判断是否有错,然后通过自定义的业务异常返回到前端。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章