如何在Java Bean验证中停止级联

时间:2016-06-24 02:30:27

标签: java bean-validation

我有这门课;

public class A {
    @NotNull @Valid
    private B field;
}

当我希望测试此类的验证时,我不希望它级联,我只希望测试@NotNull,并且不希望它级联验证到类B由于@Valid

我一直在使用;

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<A>> validationResult = validator.validate(buildA());

但是它逐渐归结为B的验证,如何在不修改bean的情况下停止验证级联?我希望隔离类A

的验证

2 个答案:

答案 0 :(得分:0)

它上面有一个很好的链接,它会清除你的查询:在这里你会发现如何限制对象图中的验证。 http://beanvalidation.org/1.0/spec/#constraintdeclarationvalidationprocess-validationroutine-graphvalidation

这种递归验证实际上是由于@Valid注释,实际上,根据规范,添加@Valid完全是为了这个用例。来自JSR 303规范:

  

除了支持实例验证,验证图形   对象也受支持。返回图表验证的结果   作为一组统一的约束违规。考虑一下情况   其中bean X包含Y类型的字段。通过使用注释字段Y.   @Valid注释,验证器将验证Y(和它的   属性)当X被验证时。

...

@Valid注释以递归方式应用。所以@Valid基本上只是为了这个目的。

请参阅以下答案:

Conditionally prevent cascading validation automatically cascade beans-validation recursively, @Valid annotation

答案 1 :(得分:0)

如果您可以修改实体,则可以尝试使用组,但如果不是,则可以使用Validator.validateProperty()来验证属性。否则,您可以添加一些覆盖注释的XML配置。这些是否对您有所帮助,取决于您的使用案例以及如何与Bean验证集成。