0

I actually try to use a @Value into a java Validator, like this

    @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 {};
}

I have put the annotation in a filed of the object "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);
        }
    }
}

In configuration, i have try two method:

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

But doesn't work :/ And the @Value work in a Controller

Any tips for this?

Dharman
  • 30,962
  • 25
  • 85
  • 135
Kawarz
  • 1
  • 2

1 Answers1

0

I found the solution thanks to a person who unfortunately deleted his comment:

I have add in the configuration:

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

    return validatorFactory.getValidator();
}

And just need to use the validatorWithSpringContext after that

Added on behalf of OP

Dharman
  • 30,962
  • 25
  • 85
  • 135