Lombok 的 @NonNull 在验证期间干扰 javax.validation.constraints.NotNull

Lombok's @NonNull interfering with javax.validation.constraints.NotNull during validation

Lombok 的 @NonNull 注释在 spring 启动应用程序验证期间干扰 javax.validation.constraints.NotNull 注释。

我在我的 JPA 实体中使用 Lombok 来大幅缩短其中的代码(消除 getter 和 setter、哈希码和 equals、构造函数等)。我在每个必填字段上使用 @NonNull 注释,然后在 class 顶部使用 @RequiredArgsConstructor 注释来生成一个只接受这些字段的构造函数(消除了发送实体的 id、UUID 和一对多的需要创建对象时设置为 null)。

我遇到的问题是,自从不久前添加 Lombok 以来,我原来的 @NotNull 注释消息被 @NonNull 注释的通用 Lombok 消息所取代。例如看一下这个字段:

@Digits(integer = 5, fraction = 0, message = "The orders port must be a number from 1 to 65 535!")
@NotNull(message = "The orders port is required!")
@Min(value = 1, message = "The orders port must be a number from 1 to 65 535!")
@Max(value = 65535, message = "The orders port must be a number from 1 to 65 535!")
@Column(nullable = false)
@NonNull
private Integer ordersPort;

当我在此字段中未输入任何内容时,收到此消息:

Property ordersPort threw exception; nested exception is java.lang.NullPointerException: ordersPort is marked @NonNull but is null

在添加 Lombok 之前,它运行良好,我收到了我在上面放置的消息。有没有办法继续使用 Lombok 但在验证期间以某种方式禁用它?

谢谢!

由于 lombok.NonNull 将直接在代码中发出 if 语句,稍后会抛出 NullPointerException,因此您无能为力。 javax.validation 要求在验证之前构造 bean,Lombok 会阻止它。

您可以删除 lombok.NonNull 或使用 lombok.nonNull.flagUsage=warning 将其降低为警告,但这将允许您创建无效对象,您必须使用 javax.validation.[=17 手动验证这些对象=]