验证组继承

时间:2014-10-25 14:44:52

标签: java hibernate bean-validation hibernate-validator

给出以下类和接口

class Person {

  @NotNull(groups=Both.class)
  private String name;
}

验证群组:

interface One {}
interface Two {}
interface Both extends One, Two {}

致电

Person person = new Person();

validator.validate(person, One.class) 

validator.validate(person, Two.class)  

我希望它应该是无效的,因为name为null但它没有。 事实证明,只有在validator.validate(...,Both.class)方法中使用时,Both.class组才有用。

1 个答案:

答案 0 :(得分:4)

你的继承方向错误。 Both群组延伸OneTwo您可能会将其视为" Both包含OneTwo" 。这意味着,每次您对Both组进行验证时,组OneTwo的所有约束也都包含在Both中,因此会经过验证。

但反之则不然:属于组Both的约束不属于One,也不属于Two。因此,如果您验证组One的约束,则属于两者的约束将无法验证。

请参阅http://beanvalidation.org/1.1/spec/#constraintdeclarationvalidationprocess-groupsequence-groupinheritance以获取参考。