Как избежать добавления @Valid во все поля внутреннего класса во время гибернации-валидатора?

В настоящее время я разрабатываю приложение, в котором я добавляю несколько проверок внутреннего класса, такого как @NotNull, @Min, @Max, etc.

Чтобы проверка работала, мне нужно добавить @Valid к каждому полю, которое использует внутренний класс. Есть ли способ избежать добавления @Valid к каждому объекту, а добавить некоторые аннотации к классу, чтобы его можно было применить ко всем полям в этом классе?

В настоящее время я использую следующую библиотеку для проверки:

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-hibernate-validator</artifactId>
</dependency>

Я попытался добавить @Validated в класс, но похоже, что эта аннотация недоступна в этой зависимости maven. Может кто-нибудь, пожалуйста, дайте мне знать, что мне нужно изменить?

Ниже приведен простой пример, который работает, но я хотел бы удалить @Valid, который я должен добавить в каждое поле. Если я не добавлю @Valid, эти внутренние классы не будут проверены.

public class Book {
    @NotNull(message = "Book ID cannot be NULL")
    private int bookId;

    @Valid
    private List<Author> author;

    @Valid
    private List<Publication> author;
}


public class Author {
    @NotNull(message = "Author ID cannot be NULL")
    private int authorID;

    @NotNull(message = "Author Name cannot be NULL")
    private String name;
}


public class Publication {
    @NotNull(message = "Publication ID cannot be NULL")
    private int authorID;

    @NotNull(message = "Publication Name cannot be NULL")
    private String name;
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Невозможно сделать то, что вы хотите, за исключением того, что вы напишете собственное расширение Quarkus, которое добавит аннотации во время сборки.

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

Кроме того, вы должны добавить аннотации @Valid внутри List, например. List<@Valid Publication> а не на полевом уровне. Так более оптимизировано.

Большое спасибо за ответ. Конечно, добавится во все поля и, как вы указали, добавится в список.

BATMAN_2008 18.03.2022 11:23

Другие вопросы по теме