【发布时间】:2022-01-01 01:16:03
【问题描述】:
我正在寻找使用自定义验证器来验证我的对象属性,并且我需要注入一些 bean。所以我不能自动装配任何豆子,我得到了这个例外:
java.lang.NoSuchMethodException: com.*.*.MyValidatorValidator.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3517)
at java.base/java.lang.Class.getConstructor(Class.java:2238)
at org.hibernate.validator.internal.util.privilegedactions.NewInstance.run(NewInstance.java:41)
... 110 common frames omitted
如何成功自动装配 bean?
@Slf4j
@RequiredArgsConstructor
public class MyValidator implements ConstraintValidator<ValidMapper, String> {
private MyService myService;
@Autowired
public MyValidator(MyService myService) {
this.myService= myService;
}
@Override
public boolean isValid(String valueToValid, ConstraintValidatorContext context) {
// Some code using MyService
return true;
}
}
【问题讨论】:
-
您需要添加代码以便我们为您提供帮助。谢谢!
-
验证器需要被验证框架(这里是 Hibernate Validator)实例化,并且它们不是 Spring bean,因此自动装配通常不可用。如果您解释您的验证概念,我们可能会提供帮助。 (另请注意,如果您将 Lombok 与 Spring bean 一起使用,则可以只使用
@RequiredArgsConstructor;如果您只有一个构造函数,则不需要@Autowired。) -
..但我认为它仍然可行/可能/容易;)(我会在回答之前进行测试:)
标签: java spring-boot bean-validation