spring 參數驗證 的工具類 結合註解@NotNull

主要的工具類代碼如下
public class ValidatorUtils {

    private ValidatorUtils() {
    }

    /**
     * 獲取默認的Validator
     *
     * @param
     * @return
     * @title 獲取默認的Validator
     * 
     */
    public static Validator validator() {
        return ValidatorFactory.INSTANCE.getValidator();
    }

    /**
     * 驗證某個對象
     *
     * @param object
     * @return
     * @title 驗證某個對象
     *
     */
    public static ValidatorResult validate(Object object) {
        Set<ConstraintViolation<Object>> constraintViolations = validator().validate(object);
        if (constraintViolations.isEmpty()) {
            return ValidatorResult.success();
        }

        Iterator<ConstraintViolation<Object>> iterator = constraintViolations.iterator();
        // 用於存儲驗證後的錯誤信息
        StringBuffer buffer = new StringBuffer(64);
        while (iterator.hasNext()) {
            buffer.append(iterator.next().getMessage() + "  |  ");
        }

        return ValidatorResult.fail(buffer.toString());
    }

    /**
     * 獲取ValidatorFactory,保證單例
     * <功能詳細描述》
     * @title 獲取ValidatorFactory,保證單例
     * 
     */
    private enum ValidatorFactory {

        INSTANCE {
            javax.validation.ValidatorFactory factory = Validation.buildDefaultValidatorFactory();

            @Override
            public Validator getValidator() {
                return factory.getValidator();
            }
        };

        public abstract Validator getValidator();
    }

    /**
     * 驗證結果
     * <功能詳細描述>
     *
     * 
     */
    public static class ValidatorResult {
        /**
         * 是否成功
         */
        private Boolean success;

        /**
         * 描述
         */
        private String description;

        public ValidatorResult(Boolean success, String description) {
            this.success = success;
            this.description = description;
        }

        public Boolean getSuccess() {
            return success;
        }

        public void setSuccess(Boolean success) {
            this.success = success;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public static ValidatorResult success() {
            return new ValidatorResult(true, "驗證通過");
        }

        public static ValidatorResult fail(String description) {
            return new ValidatorResult(false, description);
        }

        public Boolean failed() {
            return getSuccess() == false;
        }
    }
}

使用方式:在serviceImpl層或者 controller層

ValidatorUtils.ValidatorResult validatorResult =ValidatorUtils.validate(request.getData());
        if(validatorResult.failed()){
            logger.warn("請求失敗:"+validatorResult.getDescription());
            return  result.fail(ResultCode.PARAM_ERROR.getCode(),validatorResult.getDescription());
        }

 

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