关于SpringBoot集成WebSocket后使用stomp发送消息对应路径未能成功接收到消息

自己尝试着搭建Springboot聊天室的项目,后台websocket配置如下

@Configuration
@EnableWebSocketMessageBroker //允许stomp协议
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer{
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/stomp")   //添加STOMP协议的端点。// 这个URL是供WebSocket客户端或SockJS客户端连接服务端访问的地址。
         .setAllowedOrigins("*").addInterceptors(new HttpSessionHandshakeInterceptor()). //添加允许跨域访问
         withSockJS();  //指定端点使用SockJS协议
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.setApplicationDestinationPrefixes("/topic,/queue") //服务器推送给客户端的前缀
                .enableSimpleBroker("/app");  //客户端发送给服务端的前缀
    }

}

消息接收类的代码如下

@Controller
public class MessageController {

    @MessageMapping("/test")
    @SendTo("/topic/hhh")
    public String sendMessage(Map<String,Object> map){
        return "miao";
    }
}

理论上前台应该发送消息到/api/test时Controller类应该能接收到消息,但是发送消息后未能进入controller类

html就不贴了,js前端代码如下

window.onload=function(){
   var sockJs=new SockJS("/stomp");
   var stomp=Stomp.over(sockJs);
   stomp.connect({},function (frame) {
       console.log(frame);
       stomp.subscribe("/topic/hhh",function (data) {
           console.log(data)
       });
   })

   document.getElementById("sendMesssage").onclick=function () {
       console.log(stomp.connected);
       var message=document.getElementById("talkMessage");
       stomp.send("/app/test",{},JSON.stringify({"message":message}));
   }
}

连接完成时frame的控制台日志打印如下
Frame {command: "CONNECTED", headers: {…}, body: ""}
body: ""
command: "CONNECTED"
headers:
heart-beat: "0,0"
version: "1.1"
proto: Object
proto: Object
send时并没有断开连接,为啥发送不到对应地址?

u014400363
在那天我遇见你__ 问题已自行解决,注册路径时不拼接字符串而是传递多个String参数
大约一年之前 回复

2个回答

u014400363
在那天我遇见你__ 这里面除了建了一个实体类我直接用的MAP没区别啊???
大约一年之前 回复

设置反了
registry.setApplicationDestinationPrefixes("/topic,/queue") //服务器推送给客户端的前缀
.enableSimpleBroker("/app"); //客户端发送给服务端的前缀

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐