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 手动验证这些对象=]
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 手动验证这些对象=]