如何从单声道获得body<ClientResponse>?



我正在尝试实现 BodyExtractor 接口从 Mono获取主体作为对象而不是 Mono 中的主体。
我找不到任何BodyExtractor实现的例子。我想知道这是实现它的好主意,还是有没有其他方法可以将身体作为对象。

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

public Mono&
ltResponseEntity&ltMono&ltJsonNode>>> processUnmappedApiRequest(ServerHttpRequest request, JsonNode body) { RequestData reqData = this.prepareReqMetadata(request, body); Mono&ltClientResponse> response = commonConnector.getApiResponse(reqData); return response.map(respData ->{ int latestVersion = respData.headers().headers("version").size() == 0 ?get最新版本(请求) : Integer.parseInt(respData.headers().header("version").get(0)); 列表转换器列表; if((converterList = converterSequenceProvider.getConverterList(reqData.getRequestPath(), latestVersion, reqData.getVersion())) != null){ return 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

通过应用同步来转换此单声道发出的项 功能。

flatMap

异步

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

此外,ServerResponse.BodyBuildersyncBody还有一种方法可以取正常身体并在Mono中返回。Map 函数的参数已经是一个未包装的对象,因此您可以执行以下操作:

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

相关内容

最新更新