Решено - используйте @Value в javax Validator - PullRequest
0 голосов
/ 07 ноября 2019

Я на самом деле пытаюсь использовать @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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...