簡體   English   中英

如何在 Spring Boot 應用程序中使用 lombok.Data 注釋?

[英]How to use lombok.Data annotation in a Spring Boot application?

我在我的 POJO 類中使用了@Data注釋,但沒有生成 getter 和 setter。 我正在使用的 IDE 是 sts(Spring Tool Suite)

//User POJO Class
import lombok.Data;

@Data
public class UserVo {

    private String name;
    private String userName;
    private String email;
    private String mobile;
    private String password;
}
<!-- pom.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.aptitest</groupId>
    <artifactId>wt-online-test-backend</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>wt-online-test-backend</name>
    <description>Online Aptitude Test</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.9.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.restdocs</groupId>
            <artifactId>spring-restdocs-mockmvc</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

這里的問題可能與您檢查 getter/setter 是否實際生成的能力有關。

  1. 如果您的 IDE 告訴您未生成 getter/setter - IDE 可能是錯誤的。 它可能不會選擇生成 getter/setter; 對於您的 IDE - 確保您有相關的插件。 當您提到 STS 時,這很可能是您的問題。 嘗試與您的案例相關的鏈接之一:

  2. 使用獨立於 IDE 的 Maven 構建來確保 Lombok 生成它應該生成的內容。

對於 Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

對於搖籃:

developmentOnly 'org.springframework.boot:spring-boot-devtools'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

Lombok是一個注釋處理器 - 它可以完全訪問生成的源代碼樹。 注釋處理器通常會生成新的源文件,而 Lombok 通過添加新的字段或方法來修改現有的源文件。

Lombok 提供了很多注解。 (見完整列表

回答這個問題:Lombok 注釋不會在開發時生成代碼。 它僅在 Java 編譯器生成抽象源樹時發生。 所以不要指望每次添加注釋時代碼都會神奇地改變。

但是,您需要在您的特定 IDE 中解決它們,以便正確添加所有依賴項和導入。 下面給出了在首選 IDE 中解析 Lombok 注釋的方法。 您還可以選擇 Maven 項目並解決這些問題( Project Lombok Maven 存儲庫)。

智能理念

1) 開啟注解處理

文件 -> 設置 -> 構建、執行、部署 -> 編譯器 -> 注釋處理器 ->(根據下圖勾選復選框)

啟用注釋處理器

2) 安裝/更新 Lombok 插件(見這個

文件 -> 設置 -> 插件 -> 搜索 Lombok 插件 -> 更新或安裝

按照此鏈接中的這些步驟操作。

  • Lombok 是一個非常方便的工具,用於最小化樣板代碼並提供許多其他功能,例如延遲加載、線程安全或不變性。 這就是它在開發者社區中變得非常流行的原因。
  • 如果 Lombok 在類路徑中,它可以輕松擺脫所有 getter 和 setter 方法、類構造函數、hashcode 和 equals 方法等,只需在類中添加幾個注釋即可。
  • 要使用 Lombok,您需要在 IDE 中安裝 Lombok。 在這里,我將解釋如何使用 Eclipse。 在 Eclipse 中安裝 Lombok

1.下載 Lombok Jar 文件

  • 在您的 Maven 項目中添加以下依賴項,以便它首先下載到您的本地存儲庫中。

     <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</version> </dependency>

    現在在新創建的項目上執行mvn clean install命令,將這個 jar 下載到本地存儲庫中。

2.開始安裝龍目島

  • 在本地存儲庫中下載 jar 后,從命令提示符轉到 jar 位置並運行以下命令 java -jar lombok-1.16.18.jar,我們應該會看到 lombok 提供的 Lombok 安裝窗口。

  • 現在單擊“指定位置”按鈕,然后像這樣在 eclipse 安裝文件夾下找到 eclipse.exe 路徑。

  • 現在單擊“安裝/更新”按鈕,我們應該在 eclipse 中完成 Lombok 的安裝。

  • 正確完成所有設置后,您可以使用 Lombok 的所有提供 jar。

喜歡:

  • @數據
  • @Getter
  • @Setter
  • @NoArgsConstructor
  • @RequiredArgsConstructor
  • @ToString
  • @EqualsAndHashCode
  • @代表
  • @同步
  • @Slf4j
  • @清理

更多細節 :

首先,您不需要添加@Setter 和@Getter。 @Data 包括這兩個。
其次,您需要將 lombok 插件添加到您的 IDE。(搜索 lombok plugin for STS 或 Enabling Annotation processor for STS)。 當您這樣做時,您實際上看不到 IDE 中生成的 getter 和 setter。 這將幫助您解決 IDE 中的編譯時錯誤。 就這樣。

Spring Tool Suite IDE 基於 eclipse。

來自龍目島官方文檔: https : //projectlombok.org/download.html

Eclipse 和變體 — 將 lombok.jar 作為 Java 應用程序運行(即通常雙擊它)進行安裝。 還將 lombok.jar 添加到您的項目中。 支持的變體:Springsource Tool Suite、JBoss Developer Studio

如果它仍然不起作用,這個 Stack Overflow 討論可能會幫助你:

如何在eclipse luna中配置lombok

您還必須將 lombok aus 代理添加到您的 IDE。 有關詳細信息,請參閱https://projectlombok.org/download.html

在我的例子中,生成的類在我的實體類上有 lombok 生成的 getter/setter。 但是我仍然收到為我的實體中的所有字段綁定的空值,@Id 字段除外。 我使用的是 gradle 而不是 maven。

對我來說解決問題的是在 IntelliJ CE IDE 中安裝 Lombok 插件並啟用 IDE/項目的注釋處理。

之后,我就可以很好地堅持我的實體!

當您使用 spring boot 時,您可以省略 lombok 的版本(然后將從 Spring Boot 父 POM 繼承)。 還要檢查您的 IDE 是否配置良好!

1. 帶有 Lombok 的 Spring Boot

2. 使用 Eclipse 和 Intellij 設置 Lombok

3. 使用龍目島

請按照以下步驟操作:(100% 工作)

  1. 下載 lombok.jar 文件鏈接:[ [https://projectlombok.org/download][1] ]
  2. 在本地機器上雙擊該 jar 文件。 (它會自動找到IDE的.exe文件並顯示)
  3. 使用復選框選擇要使用 Lombok 的 IDE。
  4. 單擊“安裝/更新”按鈕(安裝幾秒鍾)。 安裝后點擊退出。
  5. 重新啟動您的 IDE 並轉到“幫助”選項卡。 然后單擊“關於(IDE_Name)”是否在該顯示器上顯示有關 Lombok 的信息,您做到了。
  6. 然后在代碼中使用 @Data 注釋。 它會起作用。

例如:

import lombok.Data;
import lombok.NonNull;

public @Data class Project {

@Id
private @NonNull String id;
private @NonNull String name; 
private @NonNull String description;

}

您需要安裝一個 lombok jar 並將其添加到 eclipse 用戶的構建路徑中。

https://howtodoinjava.com/automation/lombok-eclipse-installation-examples/#lombok-eclipse

或者,您可以在 Eclipse 中從源代碼生成 getter 和 setter 並丟棄 @Data 注釋

很明顯,問題是 Lombok 項目無法正常工作。 我有同樣的問題。 它在 IntelliJ 上完美運行,我的導師告訴我 IntelliJ 有額外的插件會自動安裝,但是 vs code 並沒有這個功能,所以你需要手動安裝項目 Lombok.so,嘗試安裝 vs code 擴展與龍目島有關。

使用 Springboot + Lombok 研究這個示例項目。 這個類使用@Data: https : //github.com/raulvillalbamedina/exampleApiHateoas/blob/master/src/main/java/com/rvillalba/exampleApiHateoas/entity/Example.java

如果您的 IDE 有錯誤,您需要一個插件:“Eclipse 和變體 Run lombok.jar as a java app(即雙擊它,通常)進行安裝。同時將 lombok.jar 添加到您的項目中。支持的變體:Springsource Tool Suite、JBoss Developer Studio IDEA IntelliJ 由 Michael Plushnikov 開發的插件增加了對大多數功能的支持。”

您需要在類中添加@Setter@Getter注釋,在pom.xml使用 Lombok 時,或者使用包含兩者的@Data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM