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格式正确,处理空指针异常等。

➡️

继续阅读