Java 21 中存在问题的注解@Builder

问题描述 投票:0回答:1

我对 Lombok 的 @Builder 注释有疑问。我正在使用带有 Java 21 的 Lombok 版本

1.18.30
。 实际的错误可以在我的问题所附的图片中看到。

https://i.stack.imgur.com/9P1jZ.png

https://i.stack.imgur.com/423gG.png

如果我使用 IDE (IntelliJ IDEA) 编译项目时出现错误消息:

java: cannot find symbol
  symbol:   method userMessage(java.lang.String)
  location: class com.api.mscompras.controller.exceptionHandler.Problem.ProblemBuilder
java spring-boot intellij-idea lombok
1个回答
0
投票

请使用构建器构造实例化您的

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());
        }
    
    }

© www.soinside.com 2019 - 2024. All rights reserved.