Интерфейс валидатора:
@Target({ ElementType.FIELD, ElementType.ANNOTATION_TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { CustomValidatorValidator.class })
@Documented
public @interface CustomValidator{
String message() default "Put here your default message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
ValidatorImplementation:
public final class CustomValidatorValidator implements ConstraintValidator<CustomValidator, List<WorkgroupId>> {
@Override
public void initialize(CustomValidator constraintAnnotation) {
}
@Override
public boolean isValid(List<WorkgroupId> yourlist, ConstraintValidatorContext context) {
if (yourlist== null)
return true;
else
return yourlist.stream().anyMatch(s -> /* filter here as you want */);
}
}
Обратите внимание, что мы возвращаем true
, если поле равно нулю, я делаю это так, потому что я просто установил ограничение @NotNull
, если мне не нужно быть пустым, чтобы у меня был больший контроль над ограничением.
Наконец:
@JsonProperty("workgroups")
@CustomValidator
private List<WorkgroupId> workgroupIds = new ArrayList<>();
П.С .: Я не понимаю, почему вы инициализируете список в этом последнем коде. Если это поле вы должны получить через запрос, то вам не нужно его инициализировать, десериализатор json инициализирует его с помощью входящего поля в json.