java - 使用 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。
我该如何解决这个问题?
解决方案
推荐阅读
- python - 将 CSV 字段类型设置为字符串,但打开 CSV 时仍为数字?
- apache-nifi - 解析后如何将文件的路径添加为流文件中的属性/字段?
- c++ - 无法在变量c ++的初始化中包含多个表达式
- reactjs - 文本字段更改值未在 OnSubmit 中更新 - React-Hook-Form 和 React Js
- javascript - TimeoutError:在自动测试中单击按钮后等待事件超时
- android - 如何在 Google Play 结算库版本 4 中混淆购买和 SkuDetails?
- sql - 在数据流转换中插入重复项 - ADF 管道
- reactjs - 努力在 react-app 中安装 node-sass
- typescript - 在 Typescript 中使用加密模块
- flutter - Flutter Riverpod:如何在家庭中传递多个参数?