javax.validation внутренний бин @Valid проверяется после внешней проверки на уровне класса - PullRequest
0 голосов
/ 23 октября 2018

У меня есть 2 класса:

@Data
public static class Inner {
    @NotNull
    private String innerField;
}

@Data
@OuterClasslevelConstraints
public static class Outer {
    @NotNull
    private String outerField;

    @Valid
    private Inner inner;
}

@Data - это аннотация lombok, @NotNull и @Valid - это javax.validation.

@OuterClasslevelConstraints - это пользовательский уровень классааннотация ограничения подтверждена моим пользовательским валидатором.Для проверки используются поля из внутренних и внешних классов.

Цель состоит в том, чтобы проверить каждое поле как во внутреннем, так и во внешнем, и только если все в порядке, запустить средство проверки на уровне класса.

ЕслиouterField - это null, валидатор на уровне класса не запускается - это то, что я хочу.

Но если innerField равно нулю (а outerField не равно null), классвалидатор высокого уровня запускается и не работает, потому что мой валидатор на уровне класса рассчитывает на то, что innerField не является null.

Я попытался определить последовательность группы валидации, используя @GroupSequence, но безуспешно - этоневозможно установить явную группу на @Valid, и она всегда запускается после внешней проверки на уровне класса.

Может быть, такой сценарий слишком сложен, чтобы его можно было реализовать с помощью javax.validation, и я должен сделать класс-проверка уровня где-нибудь еще?

...