Jsr303指定关联验证组

时间:2012-10-04 11:52:54

标签: bean-validation hibernate-validator

在验证与特定类型的bean有多个关系的对象时,我遇到了一个问题,但每个关系必须以不同的方式进行验证。 复合类:

public class Composite{
  @Valid
  private Person insurer;
  @Valid
  private Person insured;
  ...(other properties)
  private String foo;
}

人员类:

public class Person{
@NotNull(groups={Insurer.class,Insured.class})
private String name;
@NotNull(groups={Insurer.class,Insured.class})
private String surname;
...
@NotNull(groups={Insurer.class})
private String ssn;
}

所以我们有一个可以代表保险公司和投保人的人。问题在于,在验证Composite时,我希望保险公司的财产能够与保险公司集团进行验证,并向保险公司投保。无论如何它可以完成或我需要等待https://hibernate.onjira.com/browse/BVAL-208解决...

1 个答案:

答案 0 :(得分:0)

要以标准化方式解决您的问题,您确实必须等待Bean Validation 1.1,它将解决BVAL-208(组翻译)。

如果您的 Person 类还有一个标记或其他一些标准,您可以用它来确定此人是保险公司还是保险公司,您也可以使用自定义类级别约束。缺点是你正在失去一些注释的表现力,因为你必须自己在自定义约束验证器实现中进行所有验证。

另一种选择(再次需要一种区分保险公司和被保险人的方法)是使用特定于Hibernate Validator的GroupSequenceProvider。通过这种方式,您可以保留当前配置,然后根据 Person 的类型返回正确的组。