Java中@Data注解无法生成Getter/Setter的问题求助
问题:Spring Boot中Lombok的@Data注解无法生成Getter/Setter等方法,编译器报错
在Spring Boot项目中使用Lombok的@Data注解,期望自动生成equals、Getter、Setter等方法,但编译器无法识别这些方法,出现找不到方法的报错。单独使用@Getter和@Setter注解也无效,但手动编写Getter/Setter方法可正常运行,希望通过@Data注解实现自动生成。
报错信息
C:\Users\bdias\OneDrive\Рабочий стол\springboot-blog-rest-api\springboot-blog-rest-api\src\main\java\net\javaguides\springboot\AuthController.java:39:25 java: cannot find symbol symbol: method getUsernameOrEmail() location: variable loginDto of type net.javaguides.springboot.LoginDto C:\Users\bdias\OneDrive\Рабочий стол\springboot-blog-rest-api\springboot-blog-rest-api\src\main\java\net\javaguides\springboot\AuthController.java:39:56 java: cannot find symbol symbol: method getPassword() location: variable loginDto of type net.javaguides.springboot.LoginDto C:\Users\bdias\OneDrive\Рабочий стол\springboot-blog-rest-api\springboot-blog-rest-api\src\main\java\net\javaguides\springboot\AuthController.java:60:13 java: cannot find symbol symbol: method setName(java.lang.String) location: variable user of type net.javaguides.springboot.User C:\Users\bdias\OneDrive\Рабочий стол\springboot-blog-rest-api\springboot-blog-rest-api\src\main\java\net\javaguides\springboot\AuthController.java:61:13 java: cannot find symbol symbol: method setUsername(java.lang.String) location: variable user of type net.javaguides.springboot.User C:\Users\bdias\OneDrive\Рабочий стол\springboot-blog-rest-api\springboot-blog-rest-api\src\main\java\net\javaguides\springboot\AuthController.java:62:13 java: cannot find symbol symbol: method setEmail(java.lang.String) location: variable user of type net.javaguides.springboot.User C:\Users\bdias\OneDrive\Рабочий стол\springboot-blog-rest-api\springboot-blog-rest-api\src\main\java\net\javaguides\springboot\AuthController.java:63:13 java: cannot find symbol symbol: method setPassword(java.lang.String) location: variable user of type net.javaguides.springboot.User C:\Users\bdias\OneDrive\Рабочий стол\springboot-blog-rest-api\springboot-blog-rest-api\src\main\java\net\javaguides\springboot\AuthController.java:66:13 java: cannot find symbol symbol: method setRoles(java.util.Set<net.javaguides.springboot.Role>) location: variable user of type net.javaguides.springboot.User
相关User类代码
import jakarta.persistence.*; import lombok.Data; import lombok.Getter; import lombok.Setter; import java.util.Set; @Setter @Getter @Data @Entity @Table(name = "users", uniqueConstraints = { @UniqueConstraint(columnNames = {"username"}), @UniqueConstraint(columnNames = {"email"}) }) public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; private String name; private String username; private String email; private String password; @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id")) private Set<Role> roles; }
解决方案
1. 确认Lombok依赖配置正确
确保项目构建文件中已添加Lombok依赖及注解处理器:
- Maven(pom.xml):
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- 编译插件中添加注解处理器 --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build>
- Gradle(build.gradle):
compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'
2. 安装IDE的Lombok插件并开启注解处理
- IntelliJ IDEA:
- 打开
Settings→Plugins,搜索"Lombok"安装后重启IDE - 进入
Settings→Build, Execution, Deployment→Compiler→Annotation Processors,勾选"Enable annotation processing"
- 打开
- Eclipse:
- 下载Lombok.jar,双击运行后选择你的Eclipse安装路径
- 重启Eclipse并确认注解处理已开启
3. 清理缓存并重新构建项目
- 执行Maven命令:
mvn clean install - 或在IDE中点击
Build→Rebuild Project,清除旧编译缓存
4. 移除冗余注解
@Data注解已包含@Getter、@Setter、@ToString、@EqualsAndHashCode等功能,无需重复添加@Getter和@Setter,修改后的User类:
@Data @Entity @Table(name = "users", uniqueConstraints = { @UniqueConstraint(columnNames = {"username"}), @UniqueConstraint(columnNames = {"email"}) }) public class User { // 类内容不变 }
5. 检查LoginDto类的注解配置
报错中涉及LoginDto的方法找不到,需确认该类是否正确添加了@Data或@Getter/@Setter注解,确保注解生效。
内容的提问来源于stack exchange,提问作者Dias Batyrbek
相关产品推荐
相关产品推荐

