繁体   English   中英

JSR303验证组继承

[英]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标记@NotNullAll.class应用约束。 但不是相反。

将其视为一组: All都是一组常见的约束,通过扩展AllSection1成为All超集 ,而不是子集。 因此,当您使用All进行验证时,它仅应用All及其超级接口指定的那些。

如果你想让All成为Section1中的约束的超集,你需要翻转继承:

interface All extends Section1 /*, Section2, Section3...*/ {}

从这个意义上说,你可以对自己说, All 继承Section1所有约束。

这也是合理的实现,因为Java使得很难找到谁扩展了某个接口(毕竟,在引用之前,类文件甚至可能不可用),但是很容易看到给定接口扩展的接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM