проверка bean-компонента jsr349 @ Min.List, как это работает? - PullRequest
0 голосов
/ 28 сентября 2018

Я работаю над разработкой пользовательской аннотации валидации, и аннотация должна быть повторяемой.

"Min.List" может удовлетворить потребности, и я сделал то же самое в своей собственной аннотации.

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = ComboValidator.class)
public @interface Combo {
    String dependField();
    String controlledField();
    Class<? extends Releation> relation() default BaseReleation.class;

    String message() default "{combo validation}";
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default {};


    /**
     * Defines several {@link Combo} annotations on the same element.
     *
     * @see Combo
     */
    @Target({ ElementType.TYPE })
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @interface List {
        Combo[] value();
    }
}

Это работает.

На мой взгляд, валидатор создаст другой экземпляр для другого типа, который необходимо проверить.Так что внутри валидатора я могу получить данные из аннотации и сохранить их в поле уровня типа.Но при повторяющихся обстоятельствах аннотирования я замечаю, что создано более одного экземпляра.

Итак, мой вопрос: как и работает @interface List?

1 Ответ

0 голосов
/ 17 июня 2019

Поведение, которое вы наблюдаете, определено в Спецификации проверки компонентов :

[...] Поставщик проверки компонентов обрабатывает обычные аннотации [...], чей элемент значенияимеет возвращаемый тип массива аннотаций ограничений особым образом.Каждый элемент в массиве значений обрабатывается реализацией Bean Validation как обычные аннотации ограничений.

Это был способ поддержки «Повторяющихся аннотаций» до Java 8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...