如何在 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();

}