Java 有条件地防止级联验证

Java 有条件地防止级联验证,java,bean-validation,hibernate-validator,Java,Bean Validation,Hibernate Validator,鉴于课程: class Foo { @Size(max = 1) @Valid private List<Bar> bars; } class Bar { @NotBlank private String snafu; } class-Foo{ @尺寸(最大值=1) @有效的 私人酒吧名单; } 分类栏{ @不空白 私人串扰; } 当Foo.Bar上的大小约束失败时,如何应用验证来防止验证Bar.snafu 我认为我可以通过组转换和组序列

鉴于课程:

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

class Bar {
    @NotBlank
    private String snafu;
}
class-Foo{
@尺寸(最大值=1)
@有效的
私人酒吧名单;
}
分类栏{
@不空白
私人串扰;
}
当Foo.Bar上的大小约束失败时,如何应用验证来防止验证Bar.snafu

我认为我可以通过组转换和组序列的定义来实现这一点。但是我没有按照我想要的方式配置它


尽管看起来像是,定义fail fast并不是一个选项。

以下解决了这个问题:

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)
接口高级{}
@GroupSequence({Default.class,Advanced.class})
接口序列{}
福班{
@尺寸(最大值=1)
@有效的
私人酒吧名单;
}
分类栏{
@不为空(组=高级.class)
私人串扰;
}
Foo-Foo=新的Foo();
foo.bar=新的ArrayList();
添加(新条());
添加(新条());
Validator Validator=Validation.buildDefaultValidatorFactory().getValidator();
Set constraintViolations=validator.validate(foo,Sequence.class)
现在,如果有更多的条实例,那么允许(大小约束),只会生成违反大小约束的约束