英文:
Reuse custom hibernate validator in 2 different contexts
问题
我在一个使用Spring Boot 2.1.5构建的应用程序中拥有以下自定义Hibernate验证器。
public class MyValidator implements ConstraintValidator<MyValidAnnotation, DTO> {
@Autowired
private MyBean myBean;
@Override
public boolean isValid(DTO dto, ConstraintValidatorContext constraintValidatorContext) {
// 逻辑
}
}
我需要在两种情况下使用这个验证器,在isValid方法中我需要跳过一些检查。我找到了一个解决方案,可以使用以下代码在ConstraintValidatorContext上设置参数:
HibernateValidatorFactory hibernateValidatorFactory = Validation.buildDefaultValidatorFactory()
.unwrap(HibernateValidatorFactory.class);
Validator validator = hibernateValidatorFactory.usingContext()
.constraintValidatorPayload(RepairEstimateDTO.class.getSimpleName())
.getValidator();
validator.validate(dto);
问题是MyBean没有被注入,在isValid方法中,myBean为空。
如何在两个上下文中重用这个验证器,而不会出现代码重复?
谢谢
英文:
I have the following custom hibernate validator in a application build with 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
}
}
I need to use this validator in 2 cases, in isValid method I need to skip some checkings. I found a solution to set a parameter on ConstraintValidatorContext with the following code:
HibernateValidatorFactory hibernateValidatorFactory = Validation.buildDefaultValidatorFactory()
.unwrap( HibernateValidatorFactory.class );
Validator validator = hibernateValidatorFactory.usingContext()
.constraintValidatorPayload(RepairEstimateDTO.class.getSimpleName())
.getValidator();
validator.validate(dto);
The problem is that MyBean isn't injected, in isValid method myBean is null.
How can I reuse this validator in 2 contexts without code duplication?
Thanks
答案1
得分: 0
我认为这段代码将解决你的问题:
@Bean
public Validator validator(AutowireCapableBeanFactory autowireCapableBeanFactory) {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure().constraintValidatorFactory(new SpringConstraintValidatorFactory(autowireCapableBeanFactory))
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
return validator;
}
来自:https://stackoverflow.com/questions/37958145/autowired-gives-null-value-in-custom-constraint-validator
英文:
I think this piece of code will solve your problem:
@Bean
public Validator validator ( AutowireCapableBeanFactory autowireCapableBeanFactory) {
ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
.configure().constraintValidatorFactory(new SpringConstraintValidatorFactory(autowireCapableBeanFactory))
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
return validator;
}
Copied from: https://stackoverflow.com/questions/37958145/autowired-gives-null-value-in-custom-constraint-validator
专注分享java语言的经验与见解,让所有开发者获益!
评论