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

时间:2017-11-18 17:29:49

标签: hibernate-validator

我正在使用Hibernate Validator - 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);

1 个答案:

答案 0 :(得分:1)

有趣的用例。不幸的是,我不认为你可以做你想做的事情,因为你可以从isValid()触发验证。

假设您想要在每种情况下验证其他约束,我认为最好的解决方法可能是使用组。并根据ifEnabled是否为真来使用不同的组。

无论如何,你必须要特殊情况如何验证这个bean。