Java 方法未定义,无论在调用RESTAPI时使用lomboks@Data

Java 方法未定义,无论在调用RESTAPI时使用lomboks@Data,java,spring,maven,lombok,Java,Spring,Maven,Lombok,我在Maven中使用了带有RESTAPI的SpringWeb应用程序。项目编译,Tomcat服务器启动时没有问题,但当我从浏览器调用某个rest服务时,我得到一个错误,getter方法未定义,应该由Lombok生成 我用这个getter对类进行了delombok测试,看看Lombok是否正确地生成了getter,它确实生成了getter,getter在那里,但是当restapi调用调用该方法时,我得到了异常 龙目岛教育班: @XmlRootElement @Data @AllArgsConstr

我在Maven中使用了带有RESTAPI的SpringWeb应用程序。项目编译,Tomcat服务器启动时没有问题,但当我从浏览器调用某个rest服务时,我得到一个错误,getter方法未定义,应该由Lombok生成

我用这个getter对类进行了delombok测试,看看Lombok是否正确地生成了getter,它确实生成了getter,getter在那里,但是当restapi调用调用该方法时,我得到了异常

龙目岛教育班:

@XmlRootElement
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table
public class HeroEntity
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Version
    private int version;

    @Column
    private String name;

    @ManyToMany(mappedBy = "heroes")
    private List<ComicBookEntity> comicBooks;
}
在调用
heroEntity.getId()
时,在add方法中引发异常。这个getter应该由Lombok生成,就像我对类进行delombok一样,一切都很好,但是我仍然得到一个异常

pom.xml:

             <plugin>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok-maven-plugin</artifactId>
                <version>1.18.0.0</version>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>delombok</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>



<dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
            <scope>provided</scope>
        </dependency>

org.projectlombok
lombok maven插件
1.18.0.0
生成源
德隆博克
org.projectlombok
龙目
1.16.20
假如
AFAIK Lombok仅在编译阶段有效(即生成方法等)。其所有批注都有一个保留策略“源”。一旦lombok完成方法生成,就不可能在运行时“区分”原生方法和lombok生成的方法

另一方面,其他注释(这里是JPA、JAXB)在运行时得到处理,所以它们不会干扰或其他什么

所以我假设,如果JVM在运行时抱怨该方法不存在,那么它确实不存在

现在,如果在运行时该方法不存在,那么它可能确实不存在:) 真正的问题是Lombok根本不起作用,还是它生成了JPA/Hibernate不认为有效的方法

如何检查这个

我建议只打开您的war文件(同样,我隐式地假设您在tomcat中有一个war文件),在
WEB-INF/lib/一个jar.jar
中找到
heronentity.class
,并通过某种反汇编程序运行它,比如JAD或javap,看看生成了什么。 如果您看到有一些getter,那么它的返回类型可能与Hibernate的预期不匹配(Long vs Long,等等)

或者,如果根本没有任何getter,那么Lombok不起作用,您应该检查您的构建


我知道这更多的是猜测,而不是真实准确的答案,但这里似乎没有足够的信息,不是因为问题不好或什么的,但是,因为在你的项目中可能有更多的配置会影响答案。

有什么例外?@GauravSrivastav方法未定义。非常感谢你的答案!我检查了HeroEntity.class,没有Lombok生成的代码,因此没有getter。我不知道为什么会这样,因为正如我所说,在代码的delomboked版本中,所有应该由lombok生成的方法都存在。哦,对不起,你说
WEB-INF/lib
,我检查了
WEB-INF/classes
中的
.class
文件。你所说的libs.jar的
是什么意思?在
lib
文件夹中,我得到了依赖项JAR,我应该在反汇编程序中运行哪个?我只是指运行Tomcat的JVM实际加载的类文件。从技术上讲,如果此源文件位于带有打包war的模块中,它可以位于WEB-INF/classes/heronentity.class中,或者,如果您将其保存在另一个模块(多模块项目)中,它将创建jar,并将其与WEB-INF/lib/your-jar.jar中的第三方依赖项放在一起,在其中您将找到heronentity.class,如果没有lombok生成的代码,这意味着在构建过程中lombok没有运行它的魔力,因此问题在于构建:)
             <plugin>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok-maven-plugin</artifactId>
                <version>1.18.0.0</version>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>delombok</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>



<dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
            <scope>provided</scope>
        </dependency>