我在使用Spring Boot 2.1.5的应用程序构建中具有以下自定义休眠验证器。
public class MyValidator implements ConstraintValidator<MyValidAnnotation, DTO> {
@Autowired
private MyBean myBean;
@Override
public boolean isValid(DTO dto, ConstraintValidatorContext constraintValidatorContext) {
// logic
}
}
我需要在2种情况下使用此验证器,在isValid方法中,我需要跳过一些检查。我找到了使用以下代码在ConstraintValidatorContext上设置参数的解决方案:
HibernateValidatorFactory hibernateValidatorFactory = Validation.buildDefaultValidatorFactory()
.unwrap( HibernateValidatorFactory.class );
Validator validator = hibernateValidatorFactory.usingContext()
.constraintValidatorPayload(RepairEstimateDTO.class.getSimpleName())
.getValidator();
validator.validate(dto);
问题是未注入MyBean,在isValid方法中myBean为null。
如何在2个上下文中重用此验证器而无需代码重复?
谢谢
我认为这段代码将解决您的问题:
@Bean
public Validator validator ( AutowireCapableBeanFactory autowireCapableBeanFactory) {
ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
.configure().constraintValidatorFactory(new SpringConstraintValidatorFactory(autowireCapableBeanFactory))
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
return validator;
}
复制自:Autowired gives Null value in Custom Constraint validator