【问题标题】:Using lombok dependency in my spring-boot project but the getter method yields error at runtime (built successfully though)在我的 spring-boot 项目中使用 lombok 依赖项,但 getter 方法在运行时会产生错误(尽管构建成功)
【发布时间】:2021-08-04 15:55:16
【问题描述】:

我正在使用 Gradle 作为 ItelliJ IDE 上的构建工具开发一个 spring-boot 项目。

我在 gradle.build 中声明了 lombok 的依赖关系:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web:2.5.3'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    compileOnly 'org.projectlombok:lombok:1.18.20'
}

我有一个模型类:

import lombok.Data;
import java.math.BigDecimal;

@Data
public class ProductModel {
    private String name;
    private BigDecimal price;
    private Integer quantity;
}

如您所见,我已使用@Data 进行注释。

我的控制器有处理POST请求的方法,它的payload映射到ProductModel

@PostMapping
public String createProduct(@RequestBody ProductModel productPayload) {
       // Runtime error: error: cannot find symbol, 'getName' in 'ProductModel'
       productPayload.getName();
}

我知道我需要在我的 IntelliJ IDE 上安装 lombok 插件,以避免在 getter 方法上出现编译器错误。所以我就这么做了。但是当我运行我的应用程序时,我得到了错误:

error: cannot find symbol
symbol:   method getName()
location: variable productPayload of type CreateProductRestModel

我还尝试将依赖项从 compileOnly 更改为 implementation

implementation 'org.projectlombok:lombok:1.18.20'

没用。这是为什么?我错过了什么?

(我的 IntelliJ 上也启用了annotationProcessor

【问题讨论】:

  • 您是只安装了插件还是同时激活了注解处理? gradle 中还有 annotationProcessortestAnnotationProcessor 依赖项,应该设置。
  • 我忘了提到我在 IntelliJ 中启用了 annotationProcessor。您能否提供 gradle 中 annotationProcessor 的代码 sn-p?
  • @thinkgruen 你能回答一下吗,我会接受的。谢谢!

标签: spring-boot intellij-idea lombok intellij-plugin intellij-lombok-plugin


【解决方案1】:

为了让 Gradle 使用注释处理器,他们引入了一个单独的配置,该配置将在“正常”编译之前生成所有新代码。

对于 Lombok,它看起来像这样:

dependencies {
    compileOnly 'org.projectlombok:lombok:1.18.20'
    annotationProcessor 'org.projectlombok:lombok:1.18.20'
    
    testCompileOnly 'org.projectlombok:lombok:1.18.20'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-22
    • 2017-06-24
    • 2020-08-18
    • 2018-09-20
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多