11

我有一个具有多个(自定义)内部约束和一个类级约束的 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 是否知道如何确保在内部约束之后验证类级别约束?(这似乎不是默认设置!一段时间后我遇到了随机问题。)

4

1 回答 1

16

试试这个:

@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 Validation 规范的第 3.4.3 节:

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

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

于 2012-04-30T13:59:22.200 回答