You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot STOMP端点路由异常:Postman无法正确发送WebSocket消息

Postman STOMP协议WebSocket消息发送丢失问题排查

问题场景

我用Postman通过STOMP协议发送WebSocket消息时遇到问题,新建测试项目后仍没找到消息无法发送的原因。搭配SockJS fallback测试时功能正常,但Postman这边发送的消息疑似丢失,无法触发后端的消息处理方法。

WebSocket配置代码

@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/gs-guide-websocket");
        registry.addEndpoint("/gs-guide-websocket").setAllowedOrigins("http://localhost:8080").withSockJS();
    }
}

注:注册了两个端点,第一个专门供Postman使用。

后端消息处理代码

@MessageMapping("/hello")
@SendTo("/topic/greetings")
public MessageResponse send(Message message) throws Exception {
    return new MessageResponse(message.getContent());
}

当前状态

Postman能通过ws://localhost:3000/gs-guide-websocket成功建立WebSocket连接,但发送的消息无法被上述@MessageMapping方法处理,不清楚消息去向,查阅Postman文档也未找到解决办法。想问是代码对端点的处理存在问题,还是Postman端的配置有问题?

测试参考Spring官方的WebSocket STOMP消息指南。


排查与解决方向

1. 检查Postman消息的目标地址前缀

你的配置中通过setApplicationDestinationPrefixes("/app")指定了应用消息的前缀,这意味着客户端发送消息时,必须在目标地址前加上/app才能被@MessageMapping注解的方法接收。比如要触发@MessageMapping("/hello"),Postman里发送的消息目标应该是/app/hello,而非直接写/hello。如果遗漏前缀,消息会直接被转发到消息代理(/topic这类),不会进入你的业务处理逻辑,看起来就像“丢失”了。

2. 验证Postman的STOMP消息格式

STOMP消息必须符合规范格式,示例如下:

SEND
destination:/app/hello
content-type:application/json

{"content":"测试消息内容"}

^@

注意事项:

  • 消息头和消息体之间要有空行
  • 最后必须添加^@(代表消息结束符,Postman中可按Ctrl+Enter输入)
  • 消息体的JSON结构要和你的Message实体类字段完全匹配,否则后端无法解析,也不会触发处理方法

3. 补充纯WebSocket端点的跨域配置

你给带SockJS的端点设置了setAllowedOrigins("http://localhost:8080"),但供Postman使用的纯WebSocket端点未配置跨域。虽然你能建立连接,但隐性的跨域限制可能影响消息传输,可尝试添加跨域配置:

registry.addEndpoint("/gs-guide-websocket").setAllowedOrigins("*");

注:生产环境请勿使用*,需指定具体的允许来源地址

4. 开启后端日志追踪

在Spring配置中开启WebSocket相关的DEBUG日志,能清晰看到消息的接收、解析和转发流程,快速定位问题环节。比如在application.yml中添加:

logging:
  level:
    org.springframework.messaging: DEBUG
    org.springframework.web.socket: DEBUG

通过日志可以确认后端是否收到了Postman发送的消息,以及是否存在解析错误、路由异常等问题。


内容的提问来源于stack exchange,提问作者user14423033

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:31:17