繁体   English   中英

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

[英]how to execute validation on property annotated with @valid before a class level annotation?

假设一个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-redefiningdefaultgroup

@Valid 是组概念的正交概念。 如果两个组按顺序排列,则在评估第二个组之前,第一个组必须通过所有关联的对象。 但是请注意,默认组序列覆盖对于定义它的类是本地的,不会传播到关联的对象。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM