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



假设一个类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;
}

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

@Valid是群概念的正交概念。如果两组按顺序,第一组必须通过所有关联对象在评估第二组之前。但请注意,违约组序列重写是在其上定义的类的本地,并且不会传播到关联的对象。

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

根据您的用例,您也可以使用@ConvertGroup。有关示例,请查看Hibernate Validator的规范或在线文档。

最新更新