没有调用Java Spring STOMP MessageMapping

时间:2018-01-10 17:10:46

标签: java spring spring-mvc jackson stomp

我正在尝试让我的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中注册它(不起作用)。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

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

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