Вопрос по java – Проверка Java Bean: GroupSequence с ограничением на уровне класса

6

У меня есть класс бина с несколькими (пользовательскими) внутренними ограничениями и одним ограничением на уровне класса. Я хотел бы проверить внутренние ограничения перед ограничением на уровне класса. Код выглядит так:

<code>@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;
}
</code>

(Inner это просто пустой интерфейс где-то валяется).

Однако, когда я пытаюсь выполнить это, ограничение на уровне класса вообще не проверяется. Когда я пытаюсь определить GroupSequence как

<code>@GroupSequence({ Inner.class, Outer.class })
</code>

Outer будучи случайным интерфейсом), я получаю исключение:

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

Знает ли он, как убедиться, что ограничение на уровне класса проверяется после внутренних? (По-видимому, это не значение по умолчанию! У меня возникли случайные проблемы с ним через некоторое время.)

Ваш Ответ

1   ответ
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 это просто замена для группы по умолчанию. Смотрите также раздел 3.4.3 спецификации Bean Validation:

Since sequences cannot have circular dependencies, using Default in the declaration of a sequence is not an option. Constraints hosted on a class A and belonging to the Default group (by default or explicitly) implicitly belong to the group A.

A sequence defined on a class A (i.e. redefining the Default groups for the class) must contain the group A. In other words, the default constraints hosted on a class must be part of the sequence definition. If a @GroupSequence redefining the Default group for a class A does not contain the group A, a GroupDefinitionException is raised when Constraint declaration and validation process the class is validated or when its metadata is requested.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded@GroupSequence({ NewSlotBean.class, ClassLevel.class }) @TotalBeanValid(groups = ClassLevel.class)Error: User Rate Limit ExceededNewSlotBeanError: User Rate Limit ExceededInnerGroupError: User Rate Limit Exceeded

Похожие вопросы