我有这门课;
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
答案 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验证集成。