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());
        }

先進行校驗信息的判斷是否有錯,然後通過自定義的業務異常返回到前端。

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