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

 

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