如何在 webflux 中将 spring 引导 websocket 文本消息转换为自定义 java 对象(bean 或 DTO)
how to convert spring boot websocket text message to custom java object (bean or DTO) in webflux
我正在创建 websocket 应用程序,我想从服务器端获取一个自定义对象并将其转换为我的自定义 java 对象。我正在为我的项目使用反应式 websocket。
@Override
public Mono<Void> handle(WebSocketSession session) {
session.receive()
.map(webSocketMessage -> {
//i want to convert the webSocketMessage into my object here to set properties
MyObject object = new MyObject();
//object.setName()
//object.setAddress()
return object;
}).subscribe();
}
您不想使用文本消息。您可以从 webSocketMessage
webSocketMessage.getPayload().asInputStream().readAllBytes()
获取字节数组,而不是使用文本消息,然后,您可以使用 ObjectMapper
将 byte[] 转换为如下所示的对象。之后,您可以根据需要继续管道。确保使用 handle
来识别 ObjectMapper 的任何错误。
@Override
public Mono<Void> handle(WebSocketSession session) {
session.receive()
.handle((webSocketMessage, synchronousSink) -> {
try {
MyObject myObject = new ObjectMapper()
.readValue(
webSocketMessage.getPayload().asInputStream().readAllBytes(),
MyObject.class
);
synchronousSink.next(myObject);
} catch (IOException e) {
synchronousSink.error(e);
}
})
.cast(MyObject.class)
.subscribe();
}
我正在创建 websocket 应用程序,我想从服务器端获取一个自定义对象并将其转换为我的自定义 java 对象。我正在为我的项目使用反应式 websocket。
@Override
public Mono<Void> handle(WebSocketSession session) {
session.receive()
.map(webSocketMessage -> {
//i want to convert the webSocketMessage into my object here to set properties
MyObject object = new MyObject();
//object.setName()
//object.setAddress()
return object;
}).subscribe();
}
您不想使用文本消息。您可以从 webSocketMessage
webSocketMessage.getPayload().asInputStream().readAllBytes()
获取字节数组,而不是使用文本消息,然后,您可以使用 ObjectMapper
将 byte[] 转换为如下所示的对象。之后,您可以根据需要继续管道。确保使用 handle
来识别 ObjectMapper 的任何错误。
@Override
public Mono<Void> handle(WebSocketSession session) {
session.receive()
.handle((webSocketMessage, synchronousSink) -> {
try {
MyObject myObject = new ObjectMapper()
.readValue(
webSocketMessage.getPayload().asInputStream().readAllBytes(),
MyObject.class
);
synchronousSink.next(myObject);
} catch (IOException e) {
synchronousSink.error(e);
}
})
.cast(MyObject.class)
.subscribe();
}