我正在尝试实现 BodyExtractor 接口从 Mono
我找不到任何BodyExtractor实现的例子。我想知道这是实现它的好主意,还是有没有其他方法可以将身体作为对象。
下面是我目前拥有的代码行
public Mono<ResponseEntity<Mono<JsonNode>>> processUnmappedApiRequest(ServerHttpRequest request, JsonNode body) { RequestData reqData = this.prepareReqMetadata(request, body); Mono<ClientResponse> 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
所以这里的重点是我不想使用bodyToMono方法,我不确定如何使用body方法。
请在这里帮助我。
如果您尝试只返回一个Mono
对象,则可以使用flatMap
方法而不是map
,这样您就可以避免类似Mono<Mono<X>>
的东西并得到Mono<X>
。
map
通过应用同步来转换此单声道发出的项 功能。
flatMap
转换此 Mono 发出的项,返回 另一个 Mono 发出的值(可能更改值类型)。
此外,ServerResponse.BodyBuilder
syncBody
还有一种方法可以取正常身体并在Mono
中返回。Map 函数的参数已经是一个未包装的对象,因此您可以执行以下操作:
JsonNode jsonNode=transform(clientResponse);
return ResponseEntity.ok().syncbody(jsonNode);