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

Spring Boot中用Postman连接WebSocket遇404错误求助

问题描述

我是Java和WebSocket新手,跟着教程写了Spring Boot WebSocket代码,想用Postman验证功能是否正常。请求地址是ws://localhost:8080/cat,期望触发Controller的/cat端点,但一直返回404错误。以下是我的代码和错误详情:

ChatController代码

@Controller
public class ChatController {

    @MessageMapping("/cat")
    @SendTo("/topic/public")
    public ChatMessage hatResponse(@Payload final ChatMessage chat) {
        System.out.println("hat");
        return chat;
    }
}

WebSocketConfig代码

@Configuration
@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("/cat"); // 这里不是应该暴露"cat"端点吗?
    registry.addEndpoint("/cat").withSockJS(); 
  }

}

错误详情

Error: Unexpected server response: 404
Handshake Details
Request URL: http://localhost:8080/cat
Request Method: GET
Status Code: 404 
Request Headers
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: uwNdTzo+d0HSl70zn1OajA==
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Host: localhost:8080
Response Headers
Vary
0: Origin
1: Access-Control-Request-Method
2: Access-Control-Request-Headers
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 04 Apr 2023 01:45:34 GMT

问题排查与解决方案

核心原因

你的配置和请求存在两个关键问题:

  • 端点注册重复:重复添加/cat端点可能导致Spring Boot路径匹配异常;
  • 概念混淆:registerStompEndpoints中的/cat是WebSocket握手端点,用于建立连接;而@MessageMapping("/cat")是STOMP消息目的地,必须结合配置的/app前缀使用,不能直接通过握手路径触发。

修复步骤

  1. 清理重复的端点注册
    修改WebSocketConfig的registerStompEndpoints方法,保留一个端点注册即可:

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
      registry.addEndpoint("/cat").withSockJS(); // 统一注册带SockJS兼容的端点
    }
    
  2. 正确使用Postman测试

    • 建立WebSocket连接:在Postman创建WebSocket请求,地址填写ws://localhost:8080/cat,点击"Connect",确认连接成功;
    • 发送STOMP消息:切换到"Message"标签,选择STOMP类型,在"Destination"中填写/app/cat,消息体传入符合ChatMessage结构的JSON(例如{"content":"test","sender":"me"}),发送后即可触发ChatController的方法,同时会收到/topic/public返回的消息。
  3. 检查拦截规则
    如果项目中有Spring Security或自定义拦截器,需要确保/cat路径被放行,允许WebSocket握手请求通过。

额外说明

  • @MessageMapping的路径是消息路由地址,必须加上setApplicationDestinationPrefixes配置的/app前缀才能被正确路由;
  • SockJS用于兼容低版本浏览器,若仅测试原生WebSocket,可去掉withSockJS(),Postman支持原生WebSocket连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:30:32