【问题标题】:how to execute validation on property annotated with @valid before a class level annotation?如何在类级别注释之前对使用@valid 注释的属性执行验证?
【发布时间】:2016-05-27 05:22:44
【问题描述】:

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

【问题讨论】:

    标签: java validation hibernate-validator


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2016-10-24
      相关资源
      最近更新 更多