如何避免在休眠验证器期间在每个 inner-class 字段上添加 @Valid?

How to avoid adding @Valid on each and every inner-class fields during the hibernate-validator?

我目前正在开发一个应用程序,我正在内部 class 添加一些验证,例如 @NotNull, @Min, @Max, etc.

为了使验证工作,我需要在每个使用内部 class 的字段上添加 @Valid。有没有一种方法可以避免在每个对象上添加 @Valid 而是在 Class 上添加一些注释,这样它就可以适用于 class 中的所有字段?

我目前正在使用以下库来实现验证:

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

我试图在 class 上添加 @Validated 但似乎此注释在此 Maven 依赖项中不可用。有人可以让我知道我需要更改什么吗?

以下是一个有效的简单示例,但我想删除必须在每个字段上添加的 @Valid。如果我不添加 @Valid 那么那些内部 classes 将不会被验证。

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 扩展,它会在构建时添加注释。

不过,这将是一些相当复杂的工作,因为您需要添加一些字节码转换以在需要的位置添加注释。

此外,您应该在 List 中添加 @Valid 注释,例如List<@Valid Publication> 而不是在字段级别。这样更优化。