[英]JSR303 Validation Group inheritance
给出以下类和接口
class A{
@NotNull(groups=Section1.class)
private String myString
}
interface All{}
interface Section1 extends All {}
打电话的时候
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
进行验证并使用All.class
标记@NotNull
, All.class
应用约束。 但不是相反。
将其视为一组: All
都是一组常见的约束,通过扩展All
, Section1
成为All
的超集 ,而不是子集。 因此,当您使用All
进行验证时,它仅应用All
及其超级接口指定的那些。
如果你想让All
成为Section1
中的约束的超集,你需要翻转继承:
interface All extends Section1 /*, Section2, Section3...*/ {}
从这个意义上说,你可以对自己说, All
继承了Section1
所有约束。
这也是合理的实现,因为Java使得很难找到谁扩展了某个接口(毕竟,在引用之前,类文件甚至可能不可用),但是很容易看到给定接口扩展的接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.