首页 > 解决方案 > 使用 MappingJackson2MessageConverter 时 WebSocket 订阅未收到消息

问题描述

在使用 Spring Boot WebSockets 时,我想使用对象而不是字符串来订阅和接收任何事件。如果我的方法返回一个字符串并且我使用StringMessageConverter我的代码成功侦听该/topic/rooms/created事件。

如果我Room改为返回一个对象并使用,MappingJackson2MessageConverter那么我的订阅将不再收到任何消息。

@MessageMapping("/rooms/create/{roomName}")
@SendTo("/topic/rooms/created")
@CrossOrigin(origins = "http://localhost:3000")
public Room createRoom(@DestinationVariable final String roomName) {
    return roomService.createRoom(roomService.getRooms().size(), roomName);
}

这将发送消息并成功创建房间。订阅未获取响应。

final String roomName = "RoomName";

final StompSession.Subscription subscription = stompSession.subscribe("/topic/rooms/created", new StompFrameHandler() {
    @Override
    public Type getPayloadType(final StompHeaders headers) {
        return Room.class;
    }

    @Override
    public void handleFrame(StompHeaders headers, Object payload) {
        // Not called
        System.out.println("Received message");
    }
});

System.out.println("Sending message");
stompSession.send("/app/rooms/create/" + roomName, null);

我也尝试过创建一个Room实例并使用杰克逊对象映射器毫无问题地转换为 JSON。

我该如何解决这个问题?

标签: javaspringspring-bootjackson

解决方案


推荐阅读