Подтвердить что ты не робот

Джерси /JAX-RS: Как рекурсивно каскадно проверять бины с помощью @Valid?

Я проверяю свои POJO в конечной точке ресурса REST в Джерси:

public class Resource {
    @POST
    public Response post(@NotNull @Valid final POJO pojo) {
        ...
    }
}

public class POJO {
    @NotNull
    protected final String name;

    @NotNull
    @Valid
    protected final POJOInner inner;

    ...
}

public class POJOInner {
    @Min(0)
    protected final int limit;

    ...
}

Кажется, что это нормально.

Однако аннотация @Min(0) проверяется только в том случае, если поле inner имеет аннотацию @Valid. Невозможно добавить аннотацию @Valid к каждому полю, которое не является примитивным.

Есть ли способ сообщить валидатору bean автоматически рекурсивно продолжить проверку, даже если нет аннотации @Valid? Я бы хотел, чтобы мой POJO был следующим:

public class POJO {
    @NotNull
    protected final String name;

    @NotNull
    protected final POJOInner inner;

    ...
}
4b9b3361

Ответ 1

Собственно, согласно спецификации, добавление @Valid предназначено именно для этой утилиты. Из спецификации JSR 303:

В дополнение к поддержке проверки экземпляра поддерживается также проверка графиков объекта. Результат проверки графа возвращается как единый набор нарушений ограничений. Рассмотрим ситуацию, когда bean X содержит поле типа Y. Аннотируя поле Y с помощью аннотации @Valid, Validator будет проверять Y (и его свойства), когда X проверяется.

...

Аннотации @Valid применяются рекурсивно