我对 Lombok 的 @Builder 注释有疑问。我正在使用带有 Java 21 的 Lombok 版本
1.18.30
。
实际的错误可以在我的问题所附的图片中看到。
如果我使用 IDE (IntelliJ IDEA) 编译项目时出现错误消息:
java: cannot find symbol
symbol: method userMessage(java.lang.String)
location: class com.api.mscompras.controller.exceptionHandler.Problem.ProblemBuilder
请使用构建器构造实例化您的
Object
,如下所示:
Problem.Object.builder()
.name("name")
.build();
这是一个最小的 PoC - 请根据上面的代码重新访问您的代码,如果它仍然无法正常工作,请告诉我们。
这是你的 POJO,用 Lombok 和 Jackson 的
@JsonInclude
注释(我认为这与问题无关):
@Getter
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Problem {
private int status;
private OffsetDateTime timestamp;
private String type;
private String title;
private String detail;
private String message;
@Getter
@Builder
public static class Object {
private String name;
private String userMessage;
}
}
它应该使用标准的 Lombok Builder 构造来工作:
class ProblemTest {
@Test
void testProblemObjectShouldBeCreated() {
final var builtObject = Problem.Object.builder()
.name("name")
.userMessage("userMessage")
.build();
assertNotNull(builtObject);
assertEquals("name", builtObject.getName());
assertEquals("userMessage", builtObject.getUserMessage());
}
}