给定以下类和接口

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)


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

最佳答案

您的继承方向错误。 Both组扩展了OneTwo您可能会认为它是“ Both包含OneTwo”。这意味着,每次对Both组进行验证时,组OneTwo的所有约束也都包含在Both中,并因此得到验证。

但是反之则不成立:属于组Both的约束也不是One的一部分,也不是Two的一部分。因此,如果您验证组One的约束,则不验证属于Both的约束。

请参阅http://beanvalidation.org/1.1/spec/#constraintdeclarationvalidationprocess-groupsequence-groupinheritance作为参考。

09-05 02:39