Lombok的@NonNull注释会在Spring Boot应用程序的验证过程中干扰javax.validation.constraints.NotNull注释。
我在JPA实体中使用Lombok来大大缩短它们中的代码(消除getter和setter,hashcode和equals,构造函数等)。我在每个必填字段上使用@NonNull批注,然后在类顶部使用@RequiredArgsConstructor批注来生成仅接受这些字段的构造函数(消除了在以下情况下将实体的ID,UUID和一对多Set发送为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,但是以某种方式使其无法在验证期间被考虑?
谢谢!
答案 0 :(得分:1)
由于lombok.NonNull
将直接在代码中发出if
语句,随后又引发NullPointerException
,因此您无能为力。 javax.validation
要求在验证之前先构造Bean,Lombok会阻止它。
您可以删除lombok.NonNull
或使用lombok.nonNull.flagUsage=warning
将其降低为警告,但这将允许您创建无效的对象,而必须使用javax.validation
进行手动验证。