WebSocket subscription not receiving message when using MappingJackson2MessageConverter

Viewed 87

I would like to subscribe and receive any events using objects instead of strings when using Spring Boot WebSockets. If my method returns a string and I use the StringMessageConverter my code successfully listens for the /topic/rooms/created event.

If I return a Room object instead and use MappingJackson2MessageConverter then my subscription no longer receives any messages.

@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);
}

This sends the message and creates the room successfully. The response isn't picked up by the subscription.

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);

I've also tried creating a Room instance and using a jackson object mapper to convert to JSON with no issues.

How can I resolve this?

0 Answers
Related