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

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


person Zugwalt    schedule 17.10.2011    source источник


Ответы (1)


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

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

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

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

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

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

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

person Ryan Stewart    schedule 18.10.2011
comment
Возможно, интересно отметить, что некоторые реализации игнорируют эту спецификацию: JSF 2 не выполняет проверки на уровне класса - person Vogel612; 05.01.2015