Lombok生成的Getter/Setter无法使用,手动生成则正常
Lombok @Setter/@Getter注解失效,无法调用生成的setName方法
问题概述
Spring Boot 3.4.1(Java 21)项目中,JPA实体类Sensor添加Lombok的@Setter、@Getter注解后,编译时调用sensor1.setName("Test")提示找不到方法,构建失败。手动生成Getter/Setter可正常运行,Lombok生成的全参、无参构造函数能正常使用,升级Lombok版本未解决问题。
相关代码
Controller代码
package kz.don.sensorTracker.controller; import kz.don.sensorTracker.model.Sensor; import kz.don.sensorTracker.service.SensorService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/sensors") @RequiredArgsConstructor public class SensorController { private SensorService sensorService; @PostMapping("/registration") public Sensor save(@RequestBody Sensor sensor) { Sensor sensor1 = new Sensor(); sensor1.setName("Test"); return sensorService.save(sensor); } }
Model代码
package kz.don.sensorTracker.model; import jakarta.persistence.*; import lombok.*; import java.io.Serializable; import java.time.LocalDateTime; @Setter @Getter @Entity @Table(name = "SENSORS") @AllArgsConstructor @NoArgsConstructor @Builder public class Sensor implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID") private Long id; @Column(name = "NAME", nullable = false, unique = true) private String name; private LocalDateTime initDate; @PrePersist public void prePersist(){ initDate = LocalDateTime.now(); } }
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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.4.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>kz.don</groupId> <artifactId>sensorTracker</artifactId> <version>0.0.1-SNAPSHOT</version> <name>sensorTracker</name> <description>Demo project for Spring Boot</description> <url/> <licenses> <license/> </licenses> <developers> <developer/> </developers> <scm> <connection/> <developerConnection/> <tag/> <url/> </scm> <properties> <java.version>21</java.version> </properties> <dependencies> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.5</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.5</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.5</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</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.security</groupId> <artifactId>spring-security-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </path> </annotationProcessorPaths> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
编译错误信息
/Users/coldkey/Downloads/sensorTracker/src/main/java/kz/don/sensorTracker/controller/SensorController.java:23:16java: cannot find symbolsymbol: method setName(java.lang.String)location: variable sensor1 of type kz.don.sensorTracker.model.Sensor
解决方案
启用IDEA的注解处理和Lombok插件
打开IDEA设置(File > Settings),进入Plugins确认Lombok插件已安装启用;再进入Build, Execution, Deployment > Compiler > Annotation Processors,勾选Enable annotation processing。明确指定Lombok版本
在pom.xml的properties节点添加Lombok版本(Spring Boot 3.4.1推荐使用1.18.34及以上兼容版本):<properties> <java.version>21</java.version> <lombok.version>1.18.34</lombok.version> </properties>同时在Lombok依赖和maven-compiler-plugin的注解处理器路径中统一使用该版本:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> <scope>provided</scope> </dependency><plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin>清理缓存并重新构建
执行Maven命令清理并重新构建:mvn clean install -U同时在IDEA中执行File > Invalidate Caches... > Invalidate and Restart,清除IDE缓存后重启。
调整注解顺序
将@Setter、@Getter放在类的最顶部(优先于@Entity等JPA注解),避免注解处理顺序冲突:@Setter @Getter @Entity @Table(name = "SENSORS") @AllArgsConstructor @NoArgsConstructor @Builder public class Sensor implements Serializable { // ... 类内容 }
内容的提问来源于stack exchange,提问作者coldkey
相关产品推荐
相关产品推荐

