【问题标题】:Java Bean Validation: How do I specify multiple validation constraints of the same type but with different groups?Java Bean Validation:如何指定多个相同类型但具有不同组的验证约束?
【发布时间】:2015-06-12 16:01:44
【问题描述】:

我有多个进程,其中 bean 属性必须具有不同的值。示例:

@Min( value=0, groups=ProcessA.class )
@Min( value=20, groups=ProcessB.class )
private int temperature;

不幸的是 bean 验证 JSR 303 没有设置 @Repeatable 在 javax.validation.constraints.Min 上,所以这种方法不起作用。 我找到了“Min.List”,但没有任何关于如何使用它的文档。相反,Oracle 官方文档在http://docs.oracle.com/javaee/7/api/javax/validation/constraints/class-use/Min.List.html

没有使用 javax.validation.constraints.Min.List

所以现在这看起来像是规范错误?!?

【问题讨论】:

  • 文档还说“在同一个元素上定义了几个 Min 注释。”。所以它看起来和你想做的完全一样。你试过使用它吗?有什么困难?
  • javac 抛出编译错误:Duplicate annotation of non-repeatable type @ Min.只有标记为@Repeatable 的注解类型可以在一个目标上多次使用。
  • 这就是你使用@Min 两次时的意思,就像你发布的代码一样。这就是为什么您应该改用@Min.List 的原因,它被记录为“在同一元素上定义多个 Min 注释。”。当您使用@Min.List 时会发生什么?
  • 有趣的想法。真的。但我没有得到任何正确的语法。编写 @Min( value=0, groups=ProcessA.class ) 会导致:“注释类型 Min.List 的属性组未定义”
  • Min.List 被指定为 Min 自身的内部接口:@interface List { Min[] value(); }

标签: java validation bean-validation


【解决方案1】:

Min.List 的语法与任何其他将注释数组作为其属性之一的注释一样,是

@Min.List({ @Min(value = 0, groups = ProcessA.class),
            @Min(value = 20, groups = ProcessB.class) })

【讨论】:

  • 谢谢。而已。知道为什么这比多次使用 Min 更好吗?至少它会降低可读性。
  • 注解从 Java 8 开始是可重复的。Bean 验证是在 Java 5 或 6 上设计的。所以这种可能性不存在,因此使用 Min.List 的解决方法。如果现在设计 Bean Validation,Min.List 可能不存在。
  • 好点。谢谢。我将把它作为对 bean 验证的增强请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
相关资源
最近更新 更多