Spring WebSocket 错误
💡
原文中文,约3600字,阅读约需9分钟。
📝
内容提要
本文讨论了在使用Spring MVC和WebSocket时可能遇到的握手失败、路由无效、API弃用及依赖冲突等问题,并提供了解决方案,如显式注入JSR-356容器、使用Reactor Netty客户端、确保配置类正确和统一依赖版本。此外,还列出了一些常见错误及其排查方法。
🎯
关键要点
- JSR-356 容器握手失败的原因是 Spring MVC 默认使用的 StandardWebSocketClient() 未指定底层 WebSocketContainer,导致握手不发起。
- 解决方案包括显式注入 JSR-356 容器或切换到 Reactor Netty 客户端。
- 路由未生效的原因可能是构造函数注入 List<ISocketHandler> 导致循环依赖,需确保配置类加上 @EnableWebSocket 注解。
- API 弃用与签名变化方面,StandardWebSocketClient 使用 doHandshake(...) 而非 execute,需根据客户端类型进行修正。
- 依赖冲突的原因是 Spring Boot 3.x 使用 jakarta.websocket,而 2.x 使用 javax.websocket,需统一依赖版本。
- 其他常见错误包括循环依赖、无效 JSON 和空指针异常,需根据具体情况进行排查和处理。
❓
延伸问答
为什么在使用Spring MVC和WebSocket时会出现握手失败?
握手失败的原因是Spring MVC默认使用的StandardWebSocketClient未指定底层WebSocketContainer,导致握手不发起。
如何解决Spring WebSocket的握手失败问题?
可以显式注入JSR-356容器或切换到Reactor Netty客户端来解决握手失败问题。
路由未生效的原因是什么?
路由未生效可能是由于构造函数注入List<ISocketHandler>导致循环依赖,或者未加@EnableWebSocket注解。
Spring WebSocket中API弃用的常见问题有哪些?
常见问题包括StandardWebSocketClient使用doHandshake(...)而非execute,以及doHandshake自6.0起被弃用。
如何处理Spring Boot中的依赖冲突?
需要统一依赖版本,并确保与Spring Boot主版本匹配,必要时排除冲突项。
在Spring WebSocket中,如何排查常见错误?
可以根据错误类型进行排查,例如使用@Lazy解决循环依赖,确保JSON格式正确,处理空指针异常等。
➡️