java - 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 的含义和工作原理是什么?
解决方案
您正在观察的行为在Bean Validation Spec中定义:
[...] Bean Validation 提供程序处理常规注解 [...] 其值元素以特殊方式具有约束注解数组的返回类型。value 数组中的每个元素都由 Bean Validation 实现作为常规约束注释处理。
这是在 Java 8 之前支持“重复注释”的方式。
推荐阅读
- python - 根据另一个数据框中的值将一行插入数据框中
- python - 在数据框中查找值
- postgresql - SELECT FOR UPDATE 返回零行 CTE
- java - 我有一个动态 WebTable,我需要在其中随机选择任何两个复选框 如何做到这一点 任何线索
- ios - 替换 plist 时尝试在设备上运行应用程序时找不到可执行文件
- reactjs - React 中的非空断言运算符
- boolean - 如何在雪花中对布尔数据类型应用屏蔽策略
- mysql - MySQL选择查询结果自动截断
- javascript - 想要在现成的 jQuery 方法中使用函数
- r - 在 R 中的图表上创建一条线来表示在 col = temp 中使用的温度值