В настоящее время я разрабатываю приложение, в котором я добавляю несколько проверок внутреннего класса, такого как @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;
}
Невозможно сделать то, что вы хотите, за исключением того, что вы напишете собственное расширение Quarkus, которое добавит аннотации во время сборки.
Однако это будет довольно сложная работа, так как вам нужно будет добавить некоторое преобразование байт-кода, чтобы добавить аннотации туда, где вы хотите.
Кроме того, вы должны добавить аннотации @Valid
внутри List
, например. List<@Valid Publication>
а не на полевом уровне. Так более оптимизировано.
Большое спасибо за ответ. Конечно, добавится во все поля и, как вы указали, добавится в список.