gpt4 book ai didi

java - 如何在 ConstraintValidator 中使用 @Autowired?

转载 作者:行者123 更新时间:2023-12-02 01:17:06 25 4
gpt4 key购买 nike

是否可以在嵌套到 @interface 定义的 ConstraintValidator 中使用依赖注入(inject)?

我创建了需要验证一些数据的自定义注释。

CodebookValidator 只是一个普通的类:它没有用 @Service@Component 注释...但是 DI 没有即使我用 @Service 注释它也能工作...

知道如何在 ConstraintValidator 中使用 @Autowired 吗?这是代码片段:

@Documented
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CodebookValue.CodebookValidator.class)
public @interface CodebookValue {

Codebook value();

String message() default "Not valid";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

class CodebookValidator implements ConstraintValidator<CodebookValue, String> {

@Autowired
private CodebookService codebookService; // this won't work it's null at runtime

private Codebook codebook;

@Override
public void initialize(CodebookValue constraintAnnotation) {
codebook = constraintAnnotation.value();
}

@Override
public boolean isValid(String value, ConstraintValidatorContext ctx) {
String translate = codebookService.translate(value, codebook, codebook.getSourceSystem());
return StringUtils.isEmpty(translate);
}
}
}

最佳答案

您可以提供自己的Validator具有 Spring Autowiring 功能的 bean:

@Bean
public Validator validator(final AutowireCapableBeanFactory beanFactory) {

ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure()
.constraintValidatorFactory(new SpringConstraintValidatorFactory(beanFactory))
.buildValidatorFactory();

return validatorFactory.getValidator();
}

关于java - 如何在 ConstraintValidator 中使用 @Autowired?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58379526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com