如何在 class 级别注释之前对使用 @valid 注释的 属性 执行验证?
how to execute validation on property annotated with @valid before a class level annotation?
假设一个class A关联class B,我需要A和B之间的数据验证,所以我在class A class级别添加自定义注释,也让它在不同的组中,所以我可以控制执行顺序,但它似乎只适用于 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;
}
在 class 级别上使用 @GroupSequence
重新定义 Default 组的组序列。这是 class 本地的,不会传播到任何关联。 Default 组将在关联的 class 中验证。另请参阅 Bean 验证规范中的相关章节 - http://beanvalidation.org/1.1/spec/#constraintdeclarationvalidationprocess-groupsequence-redefiningdefaultgroup。
@Valid is an orthogonal concept to the notion of group. If two groups
are in sequence, the first group must pass for all associated objects
before the second group is evaluated. Note however that the Default
group sequence overriding is local to the class it is defined on and
is not propagated to the associated objects.
如果您想确保整个对象图在给定的组顺序中得到验证,那么您需要 "request" 此顺序作为对 [= 的顶级调用的一部分31=]。如果您自己控制验证,这应该是直截了当的。如果您将 Bean Validation 用作另一个框架的一部分,则需要参考其文档以了解如何指定组。例如,JPA 定义了一组可以设置的属性(例如在 persistence.xml 中),以便定义哪些组(序列)应该作为 JPA 生命周期事件的一部分进行评估.
根据您的用例,您或许也可以使用 @ConvertGroup。查看 Hibernate Validator 的规范或 online documentation 示例。
假设一个class A关联class B,我需要A和B之间的数据验证,所以我在class A class级别添加自定义注释,也让它在不同的组中,所以我可以控制执行顺序,但它似乎只适用于 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;
}
在 class 级别上使用 @GroupSequence
重新定义 Default 组的组序列。这是 class 本地的,不会传播到任何关联。 Default 组将在关联的 class 中验证。另请参阅 Bean 验证规范中的相关章节 - http://beanvalidation.org/1.1/spec/#constraintdeclarationvalidationprocess-groupsequence-redefiningdefaultgroup。
@Valid is an orthogonal concept to the notion of group. If two groups are in sequence, the first group must pass for all associated objects before the second group is evaluated. Note however that the Default group sequence overriding is local to the class it is defined on and is not propagated to the associated objects.
如果您想确保整个对象图在给定的组顺序中得到验证,那么您需要 "request" 此顺序作为对 [= 的顶级调用的一部分31=]。如果您自己控制验证,这应该是直截了当的。如果您将 Bean Validation 用作另一个框架的一部分,则需要参考其文档以了解如何指定组。例如,JPA 定义了一组可以设置的属性(例如在 persistence.xml 中),以便定义哪些组(序列)应该作为 JPA 生命周期事件的一部分进行评估.
根据您的用例,您或许也可以使用 @ConvertGroup。查看 Hibernate Validator 的规范或 online documentation 示例。