【发布时间】:2022-07-07 20:00:02
【问题描述】:
我尝试了几种方法将依赖项注入到我的ConstraintValidator 实现中,但没有任何效果。我已经尝试了几乎所有的 stackoverflow 线程。我正在使用 Hibernate Validator 来实现自定义验证。我希望将FileService 注入ApiMockResponseValidator。我正在分享我尝试过的东西。
- 简单的
@Autowired注解和构造函数注入:
@Component
public class ApiMockResponseValidator
implements ConstraintValidator<MockResponse, ApiMockResponse> {
@Autowired
FileService fileService;
private boolean validate(....) {
// logic
}
@Override
public boolean isValid(ApiMockResponse mockResponse, ConstraintValidatorContext context) {
System.out.println("\n\n --- " + fileService + " --- \n\n"); // remains null
// validate()
}
}
我仅通过构造函数注入以及删除@Component 进行了尝试,但没有任何效果并且验证器未实例化。简单的@Autowired 没有注入依赖,构造函数自动装配正在给予
Caused by: javax.validation.ValidationException: HV000064: Unable to instantiate ConstraintValidator: com.lendin.ib.utils.validator.ApiMockResponseValidator.
at org.hibernate.validator.internal.util.privilegedactions.NewInstance.run(NewInstance.java:44)
...
...
Caused by: java.lang.NoSuchMethodException: com.test.ApiMockResponseValidator.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
- 创建
Validatorbean
@Configuration
public class ValidatorConfig {
@Bean
@Autowired
public Validator validator(AutowireCapableBeanFactory autowireCapableBeanFactory) {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class).configure()
.constraintValidatorFactory(
new SpringConstraintValidatorFactory(autowireCapableBeanFactory))
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
return validator;
}
}
即使fileService 为空。
- 尝试创建
LocalValidatorFactoryBean
@Configuration
public class ValidatorConfig {
@Bean
@Primary
@Autowired
public Validator validator(final AutowireCapableBeanFactory autowireCapableBeanFactory) {
new SpringConstraintValidatorFactory(autowireCapableBeanFactory);
LocalValidatorFactoryBean x = new LocalValidatorFactoryBean();
x.setConstraintValidatorFactory(
new SpringConstraintValidatorFactory(autowireCapableBeanFactory));
return x;
}
}
这也无济于事,fileService 为空。
有什么方法可以实现注入依赖?
我知道如果SpringConstraintValidatorFactory 可以实例化ConstraintValidator 实现并且Hibernate 可以只使用它而不是实例化实现本身,那么它就可以工作。
【问题讨论】:
标签: java spring-boot bean-validation hibernate-validator customvalidator