Spring Boot WebSocket项目中Lombok注解失效问题求助
Spring Boot WebSocket聊天应用Lombok报错解决方案
我正在基于Spring Boot(WebSocket)开发后端聊天应用,完全参照YouTube教程编写代码,但运行时因Lombok报错。此前在其他项目中Lombok可正常使用,已尝试更换Lombok版本、Java版本,开启IntelliJ注解处理仍未解决。
相关代码与配置
WebSocketEventListener类
@Component @RequiredArgsConstructor @Slf4j public class WebSocketEventListener { private final SimpMessageSendingOperations messagingTemplate; @EventListener public void handleWebSocketConnectListener(SessionDisconnectEvent event) { StompHeaderAccessor headerAccessor = StompHeaderAccessor.wrap(event.getMessage()); String username = (String) headerAccessor.getSessionAttributes().get("username"); if (username != null) { log.info("User disconnected: {}", username); var chatMessage = ChatMessage.builder() .type(MessageType.LEAVE) .sender(username) .build(); messagingTemplate.convertAndSend("/topic/public", chatMessage); } } }
WebSocketConfig类
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry registry) { registry.setApplicationDestinationPrefixes("/app"); registry.enableSimpleBroker("/topic"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS(); } }
ChatMessage类
@Getter @Setter @Builder public class ChatMessage { private String content; private String sender; private MessageType type; }
ChatController类
@Controller public class ChatController { @MessageMapping("/chat.sendMessage") @SendTo("/topic/public") public ChatMessage sendMessage(@Payload ChatMessage chatMessage) { return chatMessage; } @MessageMapping("/chat.addUser") @SendTo("/topic/public") public ChatMessage addUser(@Payload ChatMessage chatMessage, SimpMessageHeaderAccessor headerAccessor) { headerAccessor.getSessionAttributes().put("username", chatMessage.getSender()); return chatMessage; } }
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.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.prodigy</groupId> <artifactId>server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>server</name> <description>server</description> <url/> <licenses> <license/> </licenses> <developers> <developer/> </developers> <scm> <connection/> <developerConnection/> <tag/> <url/> </scm> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-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>
排查与解决步骤
1. 确保Lombok与Spring Boot版本兼容
Spring Boot 3.x要求Lombok版本至少为1.18.22及以上,可显式指定版本避免依赖冲突:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <optional>true</optional> </dependency>
同时在maven-compiler-plugin的annotationProcessorPaths中同步指定相同版本:
<path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> </path>
2. 补全MessageType枚举定义
代码中ChatMessage使用了MessageType类型但未提供实现,编译时会因找不到类失败,需补充定义:
public enum MessageType { CHAT, JOIN, LEAVE }
3. 检查IntelliJ IDEA配置
- 确认Lombok插件已安装启用:
File > Settings > Plugins,搜索Lombok并勾选启用 - 开启注解处理:
File > Settings > Build, Execution, Deployment > Compiler > Annotation Processors,勾选Enable annotation processing - 清除缓存并重启:
File > Invalidate Caches... > Invalidate and Restart
4. 用Maven命令验证编译
跳过IDE直接执行Maven编译,判断是否为IDE配置问题:
mvn clean compile
若Maven编译成功,重新检查IDE配置;若失败,根据控制台错误日志进一步定位问题。
5. 保留Spring Boot Maven插件的Lombok排除配置
当前pom.xml中spring-boot-maven-plugin排除Lombok的配置是正确的(Lombok仅为编译时依赖),无需修改。
内容的提问来源于stack exchange,提问作者Chikara




