如何在类级别注释之前对使用@valid注释的属性执行验证?

时间:2016-05-27 05:22:45

标签: java validation hibernate-validator

假设一个类A关联类B,我需要A和B之间的数据验证,所以我在类A类级别添加一个自定义注释,也使它在不同的组中,所以我可以控制执行顺序,但它似乎只适用于A,我希望在A和B上完成基本验证后执行自定义验证,但似乎没有,B之后执行验证,如何在自定义验证之前完成? 以下是示例代码:

@XXXValidation(groups = Second.class)
@GroupSequence({A.class, Second.class})
public class A {
   @valid
   private B b;
}
public class B {
   @NotNull
   private String name;
}

1 个答案:

答案 0 :(得分:1)

在类级别使用@GroupSequence重新定义默认组的组序列。这是类的本地,不会传播到任何关联。 默认组将在关联的类中进行验证。另请参阅Bean验证规范中的相关章节 - http://beanvalidation.org/1.1/spec/#constraintdeclarationvalidationprocess-groupsequence-redefiningdefaultgroup

  

@Valid是对群体概念的正交概念。如果是两组   按顺序,第一组必须为所有关联对象传递   在评估第二组之前。但请注意默认值   组序列覆盖是在其上定义的类的本地   不会传播到关联的对象。

如果您想确保整个对象图在给定的组顺序中得到验证,那么您需要"请求"此订单是对 Validator.validate 的顶级调用的一部分。如果你自己控制验证,这应该是直截了当的。如果您将Bean Validation用作另一个框架的一部分,则需要参考其有关如何指定组的文档。例如,JPA定义了一组可以设置的属性(例如在 persistence.xml 中),以便定义哪个组(序列)应该作为JPA生命周期事件的一部分进行评估。

根据您的使用情况,您也可以使用 @ConvertGroup 。检查规范或online documentation以获取Hibernate Validator的示例。