首页 > 解决方案 > bean 验证 jsr349 @Min.List ,这是如何工作的?

问题描述

我正在开发一个自定义 Validation Annotation ,并且注释需要是可重复的。

“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 的含义和工作原理是什么?

标签: javajsr349

解决方案


您正在观察的行为在Bean Validation Spec中定义:

[...] Bean Validation 提供程序处理常规注解 [...] 其值元素以特殊方式具有约束注解数组的返回类型。value 数组中的每个元素都由 Bean Validation 实现作为常规约束注释处理。

这是在 Java 8 之前支持“重复注释”的方式。


推荐阅读