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)
现在,如果有更多的条实例,那么允许(大小约束),只会生成违反大小约束的约束