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