【问题标题】:How to use lombok.Data annotation in a Spring Boot application?如何在 Spring Boot 应用程序中使用 lombok.Data 注释?
【发布时间】:2016-02-13 09:45:57
【问题描述】:

我在我的 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>

【问题讨论】:

  • 你在使用 ide 吗?如果有,是哪一个?
  • spring-boot-starter-validation 是 spring-boot-starter-web 的一部分,你不需要它们两个
  • spring-boot-starter-validation 不再是spring-boot-starter-web 的一部分。根据release notes,他们已将其从 v2.3.0.RELEASE 中删除

标签: java spring-boot


【解决方案1】:

这里的问题可能与您检查 getter/setter 是否实际生成的能力有关。

  1. 如果您的 IDE 告诉您 getter/setter 未生成 - IDE 可能是错误的。它可能不会选择生成了 getter/setter;对于您的 IDE - 确保您有相关的插件。当您提到 STS 时,这很可能是您的问题。 尝试与您的案例相关的链接之一:

  2. 使用独立于 IDE 的 Maven 构建以确保 Lombok 生成应有的内容。

【讨论】:

    【解决方案2】:

    对于 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>
    

    对于 Gradle:

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

    【讨论】:

    • 这段代码如何回答这个问题?请提供更多详细信息,谢谢。
    • 我认为,您必须先分析类比较(lombok 和 data jpa),然后在 spring-data-jpa 依赖项中使用 标签排除这些库
    【解决方案3】:

    Lombok 是一个注释处理器 - 它可以完全访问生成的源代码树。虽然注释处理器通常会生成新的源文件,但 Lombok 通过添加新的字段或方法来修改现有的源文件。

    Lombok 提供了很多注解。 (见full List

    回答问题:Lombok 注解不会在开发时生成代码。仅当 Java 编译器生成抽象源代码树时才会发生这种情况。所以不要指望每当你添加注解时代码会神奇地改变。

    但是,您需要在特定的 IDE 中解决它们,以便正确添加所有依赖项和导入。下面给出了在首选 IDE 中解析 Lombok 注释的方法。您也可以选择一个 Maven 项目并解决这些问题 (Project Lombok Maven repository)。

    IntelliJ 理念

    1) 启用注释处理

    文件 -> 设置 -> 构建、执行、部署 -> 编译器 -> 注释处理器->(根据给定的图像勾选复选框 下面)

    2) 安装/更新 Lombok 插件 (see this)

    文件 -> 设置 -> 插件 -> 搜索 Lombok 插件 -> 更新或 安装

    Eclipse

    按照this link 中的这些步骤操作。

    【讨论】:

      【解决方案4】:
      • Lo​​mbok 是一个非常方便的工具,用于最小化样板代码并提供许多其他功能,例如延迟加载、线程安全或不变性。这就是它在开发者社区中变得非常流行的原因。
      • 如果 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.开始Lombok安装

      • 在本地存储库中下载 jar 后,从命令提示符转到 jar 位置并运行以下命令 java -jar lombok-1.16.18.jar,我们应该会看到 lombok 提供的 Lombok 安装窗口。

      • 现在点击“指定位置”按钮,像这样在eclipse安装文件夹下找到eclipse.exe路径。

      • 现在单击“安装/更新”按钮,我们应该在 Eclipse 中完成 Lombok 的安装。

      • 所有设置正确完成后,您就可以使用Lombok的所有提供jar了。

      喜欢:

      • @数据
      • @Getter
      • @Setter
      • @NoArgsConstructor
      • @RequiredArgsConstructor
      • @ToString
      • @EqualsAndHashCode
      • @Delegate
      • @Synchronized
      • @Slf4j
      • @Cleanup

      更多详情:

      【讨论】:

        【解决方案5】:

        首先,您不需要添加@Setter 和@Getter。 @Data 包括这两个。
        其次,您需要将 lombok 插件添加到您的 IDE。(为 STS 搜索 lombok 插件或为 STS 启用注释处理器)。这样做时,您不会真正看到 IDE 中生成的 getter 和 setter。这将帮助您解决 IDE 中的编译时错误。就是这样。

        【讨论】:

          【解决方案6】:

          Spring Tool Suite IDE 基于 eclipse。

          来自 Lombok 官方文档: https://projectlombok.org/download.html

          Eclipse 和变体 — 将 lombok.jar 作为 java 应用程序运行(即通常双击它)进行安装。还将 lombok.jar 添加到您的项目中。支持的变体:Springsource Tool Suite、JBoss Developer Studio

          如果它仍然不起作用,这个 Stack Overflow 讨论可能会对您有所帮助:

          how to configure lombok in eclipse luna

          【讨论】:

            【解决方案7】:

            您还必须将 lombok 代理添加到您的 IDE。详情请见https://projectlombok.org/download.html

            【讨论】:

            【解决方案8】:

            在我的例子中,生成的类在我的实体类上有 lombok 生成的 getter / setter。但是我仍然为我的实体中的所有字段绑定了空值,@Id 字段除外。我使用的是 gradle 而不是 maven。

            对我来说解决问题的是在 IntelliJ CE IDE 中安装 Lombok 插件,并为 IDE/项目启用注释处理。

            之后我就可以很好地坚持我的实体了!

            【讨论】:

              【解决方案9】:

              当您使用 Spring Boot 时,您可以省略 lombok 的版本(然后将从 Spring Boot 父 POM 继承)。还要检查您的 IDE 是否配置正确!

              1. Spring Boot with Lombok

              2. Setting up Lombok with Eclipse and Intellij

              3. Using lombok

              【讨论】:

                【解决方案10】:

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

                1. 下载lombok.jar文件 链接:[[https://projectlombok.org/download][1]]
                2. 在本地计算机中双击该 jar 文件。 (会自动查找IDE的.exe文件并显示)
                3. 使用复选框选择要使用 Lombok 的 IDE。
                4. 单击“安装/更新”按钮(安装几秒钟)。安装后点击退出。
                5. 重新启动 IDE 并转到“帮助”选项卡。然后点击“关于(IDE_Name)” 是不是在那个显示器上展示了龙目岛,你做到了。
                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;
                
                }
                

                【讨论】:

                  【解决方案11】:

                  您需要安装一个lombok jar并将其添加到eclipse用户的构建路径中。

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

                  或者,您可以在 eclipse 中从源代码生成 getter 和 setter 并放弃 @Data 注释

                  【讨论】:

                    【解决方案12】:

                    很明显,问题是 Lombok 项目无法正常工作。我有同样的问题。它在 IntelliJ 上完美运行,我的导师告诉我 IntelliJ 有额外的插件会自动安装,但是 vs code 之类的没有那个功能,所以你需要手动安装项目 Lombok.so,尝试安装 vs code 扩展与龙目岛有关。

                    【讨论】:

                    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
                    【解决方案13】:

                    使用 Springboot + Lombok 研究这个示例项目。这个类使用@Data: https://github.com/raulvillalbamedina/exampleApiHateoas/blob/master/src/main/java/com/rvillalba/exampleApiHateoas/entity/Example.java

                    如果您的 IDE 出现错误,您需要一个插件: “Eclipse 和变体将 lombok.jar 作为 java 应用程序运行(即通常双击它)进行安装。还将 lombok.jar 添加到您的项目中。支持的变体:Springsource Tool Suite、JBoss Developer Studio IDEA IntelliJ Michael Plushnikov 开发的插件增加了对大多数功能的支持。”

                    【讨论】:

                      【解决方案14】:

                      您需要在类中添加 @Setter@Getter 注释,当在 pom.xml 中使用 Lombok 时,或者使用 @Data 包括两者

                      【讨论】:

                      • 请多解释一下
                      猜你喜欢
                      • 2019-09-05
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2017-10-16
                      • 2017-10-15
                      • 2017-05-12
                      • 1970-01-01
                      相关资源
                      最近更新 更多