Зарегистрировать пользовательский валидатор для типа без аннотации - PullRequest
1 голос
/ 11 марта 2020

У меня есть следующий класс данных:

public abstract class Item {

    @NotNull
    Type getType();

    void setType(Type type);

    [...]

}

и соответствующие подклассы для каждого значения Type (enum). Затем валидатор должен проверить для всех (подтипов) Item, что Type принадлежит данному подклассу.

Реализация валидатора будет выглядеть примерно так:

boolean isValid(Item item) {
    return getImplClassFor(item.getType()).isAssignableFrom(item.getClass());
}

Как я могу зарегистрировать такой валидатор в валидаторах по умолчанию java, чтобы он автоматически выбирался валидатором Spring / Hibernate ... (по возможности реализация c)

  • spring- boot-starter-validation 2.xx
  • hibernate-validator 6.0.x
  • javax.validation-api 2.1 (или более поздней версии)

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

Рассмотренные альтернативы:

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

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

TLDR: Как зарегистрировать ConstraintValidator для класса, который не имеет аннотаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...