Spring在父级上验证具有条件的嵌套对象

时间:2015-08-04 19:01:38

标签: spring validation hibernate-validator

我想要达到的目标可能有点奇怪,但遗憾的是我无法轻易改变。我有一个具有嵌套资源的DTO。嵌套资源得到验证,并且它获得的验证根据其父项的属性而不同。

class rootDto {

  @NotEmpty
  private String type;

  @Valid
  private AddressDto address;

  // Other attributes follow ...
}

现在AddressDto如下所示:

class AddressDto {

  @NotEmpty(/* ONLY IF rootDto.type IS 'xxx' */)
  private String name;

  @NotEmpty(/* ONLY IF rootDto.type IS 'yyy' */)
  private String street;

  // Other attributes follow ...
}

我读过关于班级限制(example answer),但我不认为这是我想要的。我总是可以为Validator创建一个rootDto,其中包含AddressDto的条件验证但是这样会很难看,因为AddressDto不是我唯一需要验证的嵌套资源。

所以我的主要问题是,我可以以某种方式从其父级公开嵌套资源属性,以便将它们用于验证吗?有没有找到/想到的替代方案?

1 个答案:

答案 0 :(得分:0)

如果您使用Hibernate Validator作为Bean Validation提供程序并且很乐意使用非标准功能,您可以使用Hibernate Validator' openModal() SPI - http://docs.jboss.org/hibernate/validator/5.2/reference/en-US/html_single/#__literal_groupsequenceprovider_literal

我们的想法是使用您GroupSequenceProvider上使用GroupSequenceProvider以编程方式激活的验证组。