gpt4 book ai didi

Java Spring STOMP MessageMapping 未被调用

转载 作者:行者123 更新时间:2023-12-02 02:23:09 27 4
gpt4 key购买 nike

我正在尝试让我的 websocket 客户端(浏览器)向我的服务器发送消息。服务器应该使用 @MessageMapping 注释捕获消息,如下所示:

@Controller
public class GameController {

@MessageMapping("/game/{id}")
public void onMessage(@DestinationVariable String id,Message message) {
System.out.println("reached");
System.out.println(id);
System.out.println(message);
}

}

上面的代码片段工作正常,因为“Message”对象来自 org.springframework.messaging.Message。

但是,当我尝试将传入消息转换为我自己的 POJO 时,如下所示:

@MessageMapping("/game/{id}")
public void onMessage(@DestinationVariable String id,ChatMessage message) {
System.out.println("reached");
System.out.println(id);
System.out.println(message);
}

该函数不再被调用。看完this tutorial看起来我们可以定义 POJO 来封装 JSON 字符串,并且 @MessageMapping 应该自动将 JSON 转换为我们自定义的 Java 对象,但它对我不起作用(消息映射函数没有被调用)。

我想知道是否有人可以指出问题可能出在哪里的大致方向。需要注意的是,本教程使用的是 Spring Boot,但我使用的是 Spring MVC。我怀疑 SpringBoot 可能有一些我没有的自动配置属性,但我尝试配置我自己的 Jackson ObjectMapper 并将其注册到 WebSocketConfig 中(不起作用)。

如有任何帮助,我们将不胜感激

最佳答案

因此,我不应该使用自己的对象作为参数,而是应该将其用作泛型类型,如下所示:

@MessageMapping("/game/{id}")
public void onMessage(@DestinationVariable String id,Message<ChatMessage> message) {
//Now we can get our ChatMessage object like so
ChatMessage m = message.getPayload();
}

其中 ChatMessage 是映射到 JSON 输入的自定义对象

关于Java Spring STOMP MessageMapping 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48192691/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com