有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在类级注释之前对带有@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;
}

共 (1) 个答案

  1. # 1 楼答案

    在类级别上使用@GroupSequence重新定义默认组的组序列。这是类的本地属性,不会传播到任何关联。将在关联类中验证默认组。另请参见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.

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

    根据您的用例,您可能还可以使用@ConvertGroup。检查Hibernate验证程序的规范或online documentation以获取示例