zoukankan      html  css  js  c++  java
  • SpringBoot学习-@Validated注解自定义参数校验工具

    CommonValidatorImpl。java
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.stereotype.Component;
    import org.springframework.util.Assert;
    import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
    import org.springframework.validation.beanvalidation.SpringValidatorAdapter;
    
    import javax.validation.*;
    import java.util.Set;
    
    /**
     * 自定义hibernate校验器
     * @author zwh
     * @date 2020/6/19 11:45
     **/
    @Component
    public class CommonValidatorImpl implements InitializingBean {
    
        private Validator validator;
    
        /**
         * 实现校验方法并返回校验结果
         * @param bean
         * @return
         */
        private Set<ConstraintViolation<Object>> doValidate(Object bean, Class<?>... groups){
            Assert.state(this.validator != null, "No Validator set");
            Set<ConstraintViolation<Object>> result = this.validator.validate(bean,groups);
            return result;
        }
    
        /**
         * hibernate校验
         * @param bean
         * @return
         */
        public boolean validate(Object bean, Class<?>... groups){
            Set<ConstraintViolation<Object>> result  = this.doValidate(bean, groups);
            if (!result.isEmpty()) {
                throw new ConstraintViolationException(result);
            }
            return true;
        }
        /**
         * Perform validation of the given bean.
         *  bean the bean instance to validate
         * @see javax.validation.Validator#validate
         */
    //    protected void dovalidate(Object bean) {
    //        Assert.state(this.validator != null, "No Validator set");
    //        Set<ConstraintViolation<Object>> result = this.validator.validate(bean);
    //        if (!result.isEmpty()) {
    //            throw new ConstraintViolationException(result);
    //        }
    //        if (!result.isEmpty()) {
    //            StringBuilder sb = new StringBuilder("Bean state is invalid: ");
    //            for (Iterator<ConstraintViolation<Object>> it = result.iterator(); it.hasNext();) {
    //                ConstraintViolation<Object> violation = it.next();
    //                sb.append(violation.getPropertyPath()).append(" - ").append(violation.getMessage());
    //                if (it.hasNext()) {
    //                    sb.append("; ");
    //                }
    //            }
    //            throw new BeanInitializationException(sb.toString());
    //        }
    //    }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            this.setValidator(Validation.buildDefaultValidatorFactory().getValidator());
        }
    
        /**
         * Set the JSR-303 Validator to delegate to for validating methods.
         * <p>Default is the default ValidatorFactory's default Validator.
         */
        public void setValidator(Validator validator) {
            // Unwrap to the native Validator with forExecutables support
            if (validator instanceof LocalValidatorFactoryBean) {
                this.validator = ((LocalValidatorFactoryBean) validator).getValidator();
            }
            else if (validator instanceof SpringValidatorAdapter) {
                this.validator = validator.unwrap(Validator.class);
            }
            else {
                this.validator = validator;
            }
        }
    
        public void setValidatorFactory(ValidatorFactory validatorFactory) {
            this.validator = validatorFactory.getValidator();
        }
    }

     使用方式

    commonValidator.validate(new User);
  • 相关阅读:
    高级开发必须理解的Java中SPI机制
    希尔排序--python
    SpringContextAware使用详解
    visio professional 2013 密钥
    二分查找--python
    [Oracle]单行字符函数
    [Oracle]sqlplus调整列宽
    [Oracle]MacOS sqlplus上下选择命令
    [Oracle]开启SCOTT账户
    [Oracle]Macos 安装Oracle Client 11g 11.2.0.4
  • 原文地址:https://www.cnblogs.com/gne-hwz/p/13164511.html
Copyright © 2011-2022 走看看