Я создал аннотацию, чтобы проверить значение поля String (например, enum):
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = GenericStringSetValidator.class)
public @interface ValidStringValue {
String message() default "Must be a valid value. Found: ${validatedValue}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String[] values() default {};
}
И GenericStringSetValidator, используемый аннотацией:
public class GenericStringSetValidator implements ConstraintValidator<ValidStringValue, String> {
private Set<String> validValues;
@Override
public void initialize(ValidStringValue constraint) {
validValues = Arrays.stream(constraint.values())
.collect(toSet());
}
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
if (value == null) return false;
return validValues.contains(value);
}
}
I уже используйте это в следующем классе без каких-либо проблем:
public class SampleClass{
private String id;
@ValidStringValue(values = {"IN_PROGRESS", "COMPLETED", "DELETED"})
private String status;
}
Но я также хочу использовать его в другом классе с List<String>
для проверки каждого элемента List
. Можно ли настроить мой ValidStringValue
интерфейс, чтобы он мог использоваться на String
, а также на List<String>
?
public class SampleClassWithList{
private String id;
@ValidStringValue(values = {"A", "B", "C"})
private List<String> sampleList;
}
Большое спасибо за вашу помощь:)