我正在尝试实现BodyExtractor接口,将Mono 的正文作为对象而不是Mono的对象。
我找不到BodyExtractor实现的任何示例。我想知道这是实现它的一个好主意,还是有其他方法可以使身体成为对象。

以下是我目前拥有的代码行

 公共Mono >> processUnmappedApiRequest(ServerHttpRequest请求,JsonNode正文){
        RequestData reqData = this.prepareReqMetadata(request,body);
        Mono 响应= commonConnector.getApiResponse(reqData);

        返回response.map(respData-> {
            int LatestVersion = respData.headers()。header(“ version”)。size()== 0吗? getLatestVersion(request):
                    Integer.parseInt(respData.headers()。header(“ version”)。get(0));
            列表转换器
            if((converterList = converterSequenceProvider.getConverterList(reqData.getRequestPath(),LatestVersion,reqData.getVersion()))!= null){
                返回ResponseEntity.ok()。body(respData.bodyToMono(JsonNode.class).map(respBody-> convertToDesiredVersion(converterList,respBody)));
            }
            返回ResponseEntity.ok()。body(respData.bodyToMono(JsonNode.class));
        });
    }


在此方法中,我的返回类型为Mono >>,并且我尝试将其转换为Mono >,因为我的团队不同意Mono中的Mono。

因此,这里的重点是我不想使用bodyToMono方法,并且不确定如何使用body方法。

请帮我在这里。

最佳答案

如果尝试仅返回Mono对象,则可以使用flatMap方法而不是map,这样就可以避免使用Mono<Mono<X>>之类的方法,而只得到Mono<X>

map


  通过应用同步来变换此Mono发出的项目
  功能。


flatMap


  异步转换此Mono发出的项目,返回
  另一个Mono发出的值(可能会更改值类型)。


另外,在ServerResponse.BodyBuilder syncBody上有一种方法,该方法可以获取正常的正文并在Mono中返回它。 Map函数的参数已经是非包装对象,因此您可以执行以下操作:

JsonNode jsonNode=transform(clientResponse);
return ResponseEntity.ok().syncbody(jsonNode);

10-01 06:22
查看更多