Spring Boot WebSocket多聊天室Postman测试报404错误排查
问题分析与解决方案
核心错误原因
你混淆了WebSocket连接端点和STOMP消息目的地的概念:
- WebSocket连接仅需访问注册的端点
ws://localhost:8084/ws,无需在URL中拼接消息路径 - 报错
Invalid SockJS path '/chat/12' - required to have 3 path segments,是因为你错误地将消息目的地直接追加到WebSocket连接URL后,SockJS无法识别这种格式的路径
具体修正步骤
1. 确认消息目的地的完整路径
你的配置中设置了应用前缀:
registry.setApplicationDestinationPrefixes("/Chatroom");
控制器中的@MessageMapping("/chat/{roomId}/sendMessage")会与该前缀组合,最终完整的消息目的地是:/Chatroom/chat/{roomId}/sendMessage
2. 正确的Postman测试流程
Postman中测试STOMP消息需先建立连接,再发送消息:
- 打开Postman的WebSocket请求,选择STOMP协议
- 连接URL填写:
ws://localhost:8084/ws - 连接成功后,发送SEND帧:
- Destination字段填写:
/Chatroom/chat/12/sendMessage - Payload填写ChatMessage的JSON格式数据,示例:
{ "content": "测试消息", "sender": "用户A" }
- Destination字段填写:
3. 可选:SockJS连接方式(若需兼容旧浏览器)
如果使用SockJS兼容不支持WebSocket的环境,连接URL应为:http://localhost:8084/ws/sockjs
消息目的地仍需通过SEND帧指定,不可拼在URL中。
4. 服务端配置验证
你的配置和控制器逻辑本身无问题,只需确保:
- 客户端发送的消息目的地前缀与
setApplicationDestinationPrefixes设置的/Chatroom一致 - 客户端订阅消息时,需订阅
/channel/12(对应服务端convertAndSend(format("/channel/%s", roomId))的推送路径)
内容的提问来源于stack exchange,提问作者user20112858
相关产品推荐
相关产品推荐

