Java Bean Validation: GroupSequence with Class-Level Constraint

2022-09-03 14:08:55

我有一个具有多个(自定义)内部约束和一个类级约束的bean类。我想在类级约束之前验证内部约束。代码如下所示:

@GroupSequence({ Inner.class, NewSlotBean.class })
@TotalBeanValid(groups = NewSlotBean.class)
public class NewSlotBean {

    @DayMonthYearString(groups = Inner.class)
    private String slotDay;

    @TimeString(groups = Inner.class)
    private String slotBegin;

    @LengthString(groups = Inner.class)
    private String slotLength;
}

(Inner只是一个空的界面躺在某个地方)。

但是,当我尝试运行此命令时,类级约束根本没有得到验证。当我尝试定义 GroupSequence 时,例如

@GroupSequence({ Inner.class, Outer.class })

(作为一个随机接口),我得到异常:Outer

javax.validation.GroupDefinitionException: ...*.beans.NewSlotBean must be part of the redefined default group sequence.

s/o 是否知道如何确保在内部约束之后验证类级约束?(这似乎不是默认设置!我有一段时间后弹出的随机问题。


答案 1

试试这个:

@GroupSequence({ Inner.class, NewSlotBean.class })
@TotalBeanValid(groups = Default.class)
public class NewSlotBean {

    @DayMonthYearString(groups = Inner.class)
    private String slotDay;

    @TimeString(groups = Inner.class)
    private String slotBegin;

    @LengthString(groups = Inner.class)
    private String slotLength;
}

根据规范,NewSlotBean只是默认组的替身。另请参阅 Bean 验证规范的第 3.4.3 节:

由于序列不能具有循环依赖关系,因此在序列的声明中使用 Default 不是一个选项。在类 A 上承载并属于默认组(默认或显式)的约束隐式属于组 A。

在类 A 上定义的序列(即重新定义类的默认组)必须包含组 A。换句话说,类上承载的默认约束必须是序列定义的一部分。如果为类 A 重新定义 Default 组的@GroupSequence不包含组 A,则在验证约束声明和验证过程类或请求其元数据时,将引发 GroupDefinitionException。


答案 2

推荐