Недавно я добавил @Repeatable в свои пользовательские аннотации.Как только я добавил повторяющуюся аннотацию к полям, она работала нормально, но поля с одиночной аннотацией не работали.
Пример:
Следующие работы:
@NotNull
@CustomValidator(type = Type.SIZE, max = 80)
@CustomValidator(type = Type.FIELD)
private String firstName;
Но следование делаетне работает (поскольку он содержит только один @CustomValidator):
@NotNull
@CustomValidator(type = Type.EMAIL)
private String email;
CustomValidator.java
import java.lang.annotation.Repeatable;
import javax.validation.Constraint;
import javax.validation.Payload;
@Constraint(validatedBy = CustomValidatorImpl.class)
@Repeatable(RepeatableCustomValidator.class)
public @interface CustomValidator {
String message() default "";
int min() default 1;
int max() default Integer.MAX_VALUE;
String format() default "dd.MM.yyyy";
String[] values() default {};
Type type();
boolean optional() default false;
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
RepeatableCustomValidator.java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface RepeatableCustomValidator {
CustomValidator[] value();
}
CustomValidatorImpl.java
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class CustomValidatorImpl implements ConstraintValidator<CustomValidator, String> {
...............
@Override
public void initialize(CustomValidator constraintAnnotation) {
..........
}
}
Зависимости:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
JAVA_VERSION = "1.8.0_121"
Isесть что-то, чего мне не хватает?