如何使用 JSR 303 创建自定义嵌套验证器



我正在使用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。

最新更新