Java Bean验证:具有类级别约束的GroupSequence

时间:2012-04-30 07:49:02

标签: java bean-validation

我有一个带有多个(自定义)内部约束和一个类级别约束的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 个答案:

答案 0 :(得分:10)

试试这个:

@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 in   序列的声明不是一种选择。托管的约束   A类,属于默认组(默认情况下或   显式地)隐含地属于A组。

     

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