我正在使用Hibernate验证器 - 5.2.2(JSR 303(。
我正在进行跨字段验证,因此我需要创建自定义验证器。
但是我不知道如何进行自定义条件嵌套验证。
例:
@ValidChildrenIfEnabled
public class MainDto {
public boolean isEnabled;
public List<Child> children;
}
public class Child {
@NotBlank
public String name;
@Range(min = 1, max = 3)
public int age;
}
如果我不需要条件验证,我会把@Valid在"孩子"之上。
@Valid
public List<Child> children;
注意:我知道如何创建自定义验证器,只是不知道如何创建自定义验证器,该验证器利用现有的内置验证器进行嵌套验证。谢谢!
编辑:
我的有效载荷实际上还有一个有效载荷,比如说SuperDto。
public class SuperDto {
@Valid
public List<MainDto> mainDtos;
}
我像这样进行验证:
validator.validate(superDto);
有趣的用例。不幸的是,我认为你不能做你想做的事情,因为你无法触发来自isValid((的验证。
假设您有其他约束想要在每种情况下进行验证,我认为最好的解决方法可能是使用组。并根据 isEnabled 是否为真使用不同的组。
无论如何,您必须在特殊情况下验证此 bean。