gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:07:48 26 4
gpt4 key购买 nike

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

我在我的 JPA 实体中使用 Lombok 来大幅缩短其中的代码(消除 getter 和 setter、哈希码和 equals、构造函数等)。我在每个必填字段上使用@NonNull 注释,然后在类顶部使用@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 手动验证。

关于java - Lombok 的 @NonNull 在验证期间干扰 javax.validation.constraints.NotNull,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54076047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com