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

 

posted @ 2020-06-19 18:26  海绵般汲取  阅读(1807)  评论(0编辑  收藏  举报