【问题标题】:Java Spring STOMP MessageMapping not being called未调用 Java Spring STOMP MessageMapping
【发布时间】:2018-06-19 22:25:32
【问题描述】:

我正在尝试让我的 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);
    }

}

上面的 sn-p 工作正常,因为“消息”对象来自 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 中(不起作用)。

任何帮助将不胜感激

【问题讨论】:

  • 你解决了这个问题吗?
  • 是的!我添加了一个答案

标签: java spring spring-mvc jackson stomp


【解决方案1】:

所以我不应该使用我自己的对象作为参数,而是应该像这样将它用作泛型类型:

@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 输入的自定义对象

【讨论】:

    猜你喜欢
    • 2016-01-28
    • 1970-01-01
    • 2018-12-24
    • 2014-04-08
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    相关资源
    最近更新 更多