Пользовательские аннотации проверки не работают должным образом с использованием Java 8 @Repeatable - PullRequest
0 голосов
/ 18 сентября 2018

Недавно я добавил @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есть что-то, чего мне не хватает?

1 Ответ

0 голосов
/ 18 сентября 2018

Как отметил @Holger,

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)

Добавление этих двух в класс CustomValidator решает проблему.
Кстати, обычные проверки также не должны выполняться, если мы неупомяните эти две политики.
Вы уверены, что это работает без них?Как я и пытался, и он не работал.

...