Spring WebSocket 错误
💡
原文中文,约3800字,阅读约需9分钟。
📝
内容提要
JSR-356容器握手失败可能是由于Spring MVC默认使用不匹配的WebSocketContainer。解决方法包括显式注入JSR-356容器或切换到Reactor Netty客户端,并确保配置类添加@EnableWebSocket以避免循环依赖。Spring Boot 3.x使用jakarta.websocket,需统一依赖版本以防冲突。常见错误有循环依赖、无效JSON和空指针异常。
🎯
关键要点
- JSR-356容器握手失败的现象包括控制台没有afterConnectionEstablished日志,客户端卡在握手阶段或报错超时。
- 握手失败的原因是Spring MVC默认使用的StandardWebSocketClient未指定底层WebSocketContainer,导致与嵌入式Tomcat不匹配。
- 解决方法包括显式注入JSR-356容器或切换到Reactor Netty客户端,并确保配置类添加@EnableWebSocket以避免循环依赖。
- Spring Boot 3.x使用jakarta.websocket,需统一依赖版本以防冲突。
- 常见错误包括循环依赖、无效JSON和空指针异常,需通过@Lazy或拆分配置来解决循环依赖。
- 无效JSON错误通常是由于前端使用了错误的引号,需使用英文双引号。
- 空指针异常需判空或使用安全调用操作符。
❓
延伸问答
JSR-356容器握手失败的常见现象是什么?
常见现象包括控制台没有afterConnectionEstablished日志,客户端卡在握手阶段或报错超时。
如何解决Spring MVC中JSR-356容器握手失败的问题?
可以显式注入JSR-356容器或切换到Reactor Netty客户端,并确保配置类添加@EnableWebSocket以避免循环依赖。
Spring Boot 3.x与WebSocket的依赖版本有什么关系?
Spring Boot 3.x使用jakarta.websocket,需统一依赖版本以防冲突。
无效JSON错误通常是由什么引起的?
无效JSON错误通常是由于前端使用了错误的引号,需使用英文双引号。
如何处理Spring WebSocket中的循环依赖问题?
可以通过@Lazy注解或拆分配置来解决循环依赖问题。
Spring WebSocket中常见的空指针异常如何避免?
空指针异常需判空或使用安全调用操作符。
➡️