Если я использую javax.validation.Validator для проверки объекта, аннотированного ограничениями, будет ли он всегда оценивать ограничения уровня поля перед объектом?
Например, если у меня есть:
@DummyClassValidation
public static class DummyClassToValidate {
private Integer myNum;
@Min(value = 50)
@Max(value = 100)
public Integer getMyNum() {
return myNum;
}
public void setMyNum(Integer myNum) {
this.myNum = myNum;
}
}
И я подтверждаю это, гарантировано ли, что @DummyClassValidation будет оцениваться только после @Min и @Max? Я знаю, что могу сделать это с помощью группировок, но лучше не делать этого, если мне это не нужно (т. е. проверки полей неявно группируются для проверки перед проверкой объектов).
Ответ 1 · рейтинг 2 · Ryan Stewart
Согласно спецификации, раздел 3.5:
Ожидается, что для проверки данной группы процедура проверки, применяемая к данному экземпляру компонента, будет выполнять следующие проверки ограничений в произвольном порядке:
для всех достижимых полей выполнить все проверки на уровне поля (включая проверки, выраженные в суперклассах), соответствующие целевой группе, если данное ограничение проверки уже не было обработано во время этой процедуры проверки для данного пути навигации (см. Раздел 3.5.1) как часть предыдущий групповой матч.
для всех доступных геттеров выполнить все проверки на уровне геттеров (включая те, что выражены в интерфейсах и суперклассах), соответствующие целевой группе, если данное ограничение проверки уже не было обработано во время этой процедуры проверки для данного пути навигации (см. Раздел 3.5.1) как часть предыдущего группового матча.
выполнить все проверки на уровне класса (включая те, которые выражены в интерфейсах и суперклассах), соответствующие целевой группе, если данное ограничение проверки уже не было обработано во время этой процедуры проверки для данного пути навигации (см. Раздел 3.5.1) как часть предыдущей группы соответствовать.
для всех достижимых и каскадных ассоциаций выполнить все каскадные проверки (см. Раздел 3.5.1), включая те, которые выражены в интерфейсах и суперклассах (см. Раздел 3.4.5).
Короче говоря, вы не можете полагаться на это, если вы не хотите найти реализацию, которая гарантирует это, и придерживаться этого.