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

Если я использую 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 голосов
/ 18 октября 2011

Per спецификация , раздел 3.5:

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

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

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

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

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

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

...