Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Всегда ли/неявно выполняются проверки полей Java типа JSR-303 перед полевыми?

Автор вопроса: ZugwaltОтветов: 1

Если я использую 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? Я знаю, что могу сделать это с помощью группировок, но лучше не делать этого, если мне это не нужно (т. е. проверки полей неявно группируются для проверки перед проверкой объектов).

javavalidationobjectfieldbean-validation

Ответы

Ответ 1 · рейтинг 2 · Ryan Stewart

Согласно спецификации, раздел 3.5:

Ожидается, что для проверки данной группы процедура проверки, применяемая к данному экземпляру компонента, будет выполнять следующие проверки ограничений в произвольном порядке:

  • для всех достижимых полей выполнить все проверки на уровне поля (включая проверки, выраженные в суперклассах), соответствующие целевой группе, если данное ограничение проверки уже не было обработано во время этой процедуры проверки для данного пути навигации (см. Раздел 3.5.1) как часть предыдущий групповой матч.

  • для всех доступных геттеров выполнить все проверки на уровне геттеров (включая те, что выражены в интерфейсах и суперклассах), соответствующие целевой группе, если данное ограничение проверки уже не было обработано во время этой процедуры проверки для данного пути навигации (см. Раздел 3.5.1) как часть предыдущего группового матча.

  • выполнить все проверки на уровне класса (включая те, которые выражены в интерфейсах и суперклассах), соответствующие целевой группе, если данное ограничение проверки уже не было обработано во время этой процедуры проверки для данного пути навигации (см. Раздел 3.5.1) как часть предыдущей группы соответствовать.

  • для всех достижимых и каскадных ассоциаций выполнить все каскадные проверки (см. Раздел 3.5.1), включая те, которые выражены в интерфейсах и суперклассах (см. Раздел 3.4.5).

Короче говоря, вы не можете полагаться на это, если вы не хотите найти реализацию, которая гарантирует это, и придерживаться этого.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы