dst*_*arh 3 java bean-validation
给出以下类和接口
class A{
@NotNull(groups=Section1.class)
private String myString
}
interface All{}
interface Section1 extends All {}
Run Code Online (Sandbox Code Playgroud)
打电话的时候
A =新A(); validator.validate(一,All.class);
我希望它应该是无效的,因为myString是null并且它是notNull组扩展All但它没有.请注意,我正在使用验证器的Hibernate impl(4.0.2.GA)
您的期望与规范要求相反.从规范(PDF上的第27页):
对于给定的接口Z,标记为属于组Z的约束(即,注释元素组包含接口Z的地方)或Z的任何超级接口(继承的组)被认为是组Z的一部分.
换句话说,如果您使用Section1.class并标记@NotNull了All.class,则会应用约束.但不是相反.
把它看成是一组:All是一种常见的约束集,并且通过延伸All,Section1变成了超集的All,而不是一个子集.因此,在验证使用时All,它仅应用All由其及其超级接口指定的那些.
如果你想All成为发现的约束的超集Section1,你需要翻转继承:
interface All extends Section1 /*, Section2, Section3...*/ {}
Run Code Online (Sandbox Code Playgroud)
从这个意义上说,你可以对自己说,All 继承了所有的约束Section1.
这也是合理的实现,因为Java使得很难找到谁扩展了某个接口(毕竟,在引用之前,类文件甚至可能都不可用),但是很容易看到给定接口扩展的接口.
| 归档时间: |
|
| 查看次数: |
1311 次 |
| 最近记录: |