【问题标题】:Jsr303 specify group on association validationJsr303 在关联验证上指定组
【发布时间】:2023-03-15 03:08:01
【问题描述】:

在验证与特定类型的 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;
}

所以我们有一个单一类型的 Person 可以代表保险公司和被保险人。问题是,在验证 Composite 时,我希望让保险公司的财产与 Insurer 集团一起验证并由 Insured 投保。反正有没有可以完成的或者我需要等待https://hibernate.onjira.com/browse/BVAL-208解决...

【问题讨论】:

    标签: bean-validation hibernate-validator


    【解决方案1】:

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

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

    另一种选择(同样,您需要一种区分保险公司和被保险人的方法)是使用特定于休眠验证器的GroupSequenceProvider。这样您就可以保留当前的配置,并且您只需根据 Person 的类型返回正确的组。

    【讨论】:

    • 感谢您的回答。实际上,这些解决方法都不是很好。我可以引入一些临时的“被保险人/保险人”标志,但我最终手动验证了保险人/被保险人的财产,将它们都归为复合材料,验证复合材料,合并(带前缀)保险人/被保险人和复合违规行为。
    猜你喜欢
    • 2011-07-08
    • 2014-11-05
    • 2015-01-26
    • 2013-01-18
    • 1970-01-01
    • 2013-07-13
    • 2016-01-20
    • 2014-09-17
    • 1970-01-01
    相关资源
    最近更新 更多