Нет аннотации, которая проверяет поле напрямую. Идея пользовательской аннотации @URL
совершенно верна, но вы должны реализовать саму валидацию - аннотация - это просто знак того, что «с этим что-то должно случиться».
Я предлагаю переименовать @URL
в @URLCollection
, чтобы избежать конфликта с классом java.net.URL
. Начните с определения аннотации. Не забудьте аннотацию @Constraint
(посмотрите в ее документации, чтобы узнать, как правильно определить пользовательскую аннотацию проверки):
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = UrlCollectionValidator.class) // will be created below
public @interface URLCollection {
String message() default "default error message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Затем продолжите реализацию ConstraintValidator
:
public class UrlCollectionValidator implements ConstraintValidator<URLCollection, Collection<String>> {
@Override
public void initialize(URLCollectionconstraint) { }
@Override
public boolean isValid(Collection<String> urls, ConstraintValidatorContext context) {
return // the validation logics
}
}
Ну вот и все. Подробнее об этом читайте в Настройка пользовательских ограничений в документации Spring:
Каждое ограничение проверки bean-компонента состоит из двух частей: * A @Constraint
аннотация, которая объявляет ограничение и его настраиваемые свойства. * Реализация интерфейса javax.validation.ConstraintValidator
, который реализует поведение ограничения.