有条件地防止级联验证

时间:2015-05-22 12:26:43

标签: java bean-validation hibernate-validator

鉴于课程:

class Foo {
    @Size(max = 1)
    @Valid
    private List<Bar> bars;
}

class Bar {
    @NotBlank
    private String snafu;
}

如何应用验证,以防止在Foo.bars上的Size约束失败时验证Bar.snafu?

我虽然可以通过组转换和组序列的定义实现这一点。但我没能按照我想要的方式配置它。

即使它看起来如此,定义失败快速是一个选项。

1 个答案:

答案 0 :(得分:1)

以下解决了这个问题:

interface Advanced {}

@GroupSequence({Default.class, Advanced.class})
interface Sequence {}

class Foo {
    @Size(max = 1)
    @Valid
    private List<Bar> bars;
}

class Bar {
    @NotBlank(groups = Advanced.class)
    private String snafu;
}

Foo foo = new Foo();
foo.bars = new ArrayList<Bar>();
foo.bars.add(new Bar());
foo.bars.add(new Bar());

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Foo>> constraintViolations = validator.validate(foo, Sequence.class)

现在,如果允许更多Bar实例(大小约束),则仅生成大小约束的约束违反。