首页 > 解决方案 > 在 javax Validator 中使用 @Value

问题描述

我实际上尝试在java Validator中使用@Value,就像这样

    @Value("${necessary-list}")
    private List<String> list= new ArrayList<>();

    @Override
    public boolean isValid(String element, ConstraintValidatorContext constraintValidatorContext) {
        return list.contains(element);
    }

}
@Documented
@Constraint(validatedBy = CustomValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IsInList{

    String message() default "test";

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

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

我已将注释放在对象“Item”的字段中

@Service
public class ItemValidator {
    public void validateAddress(Item item) {
        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
        Set<ConstraintViolation<Item>> constraintViolations = validator.validate(item);
        if (isNotEmpty(constraintViolations)) {
            throw new ConstraintViolationException(constraintViolations);
        }
    }
}

在配置中,我尝试了两种方法:

necessary-list: item1,item2,item3 
necessary-list: 
- item1 
- item2 
- item3 

但不起作用:/ @Value 在控制器中工作

对此有什么建议吗?

标签: javaspring-boot

解决方案


感谢一个不幸删除了他的评论的人,我找到了解决方案:

我已经添加了配置:

    @Bean
public Validator validatorWithSpringContext(final AutowireCapableBeanFactory autowireCapableBeanFactory) {
    ValidatorFactory validatorFactory = Validation.byDefaultProvider().configure()
        .constraintValidatorFactory(new SpringConstraintValidatorFactory(autowireCapableBeanFactory))
        .buildValidatorFactory();

    return validatorFactory.getValidator();
}

之后只需要使用 validatorWithSpringContext

代表OP添加


推荐阅读