Я на самом деле пытаюсь использовать @Value в Java Validator, например,
@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 работает в контроллере
Любые советы для этого?
Я нашел решение благодаря человеку, который, к сожалению, удалил его комментарий:
Я добавил в конфигурацию:
@Bean
public Validator validatorWithSpringContext(final AutowireCapableBeanFactory autowireCapableBeanFactory) {
ValidatorFactory validatorFactory = Validation.byDefaultProvider().configure()
.constraintValidatorFactory(new SpringConstraintValidatorFactory(autowireCapableBeanFactory))
.buildValidatorFactory();
return validatorFactory.getValidator();
}
И просто необходимо использовать validatorWithSpringContext послеthatb