Java Spring中STOMP MessageMapping未被调用

4

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

该函数不再被调用。阅读了这篇教程之后,我们可以定义POJO来封装JSON字符串,并且@MessageMapping应该能够自动将JSON转换为我们的定制Java对象,但我尝试后发现并没有生效(消息映射函数没有被调用)。
我想知道问题出在哪里,希望有人能给我指个方向。需要注意的一点是,该教程使用了Spring Boot,而我使用的是Spring MVC。我怀疑Spring Boot可能拥有某些我没有的自动配置属性,但我已经尝试配置了我的Jackson ObjectMapper,并在WebSocketConfig中注册它(但没有成功)。
希望能得到任何帮助。

你解决那个问题了吗? - Edv Beq
是的!我添加了一个答案。 - Solace
1个回答

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输入


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接