[英]Get body from ClientResponse in SpringBootApplication
[英]How to get body from Mono<ClientResponse>?
我正在尝试实现BodyExtractor接口,将Mono <ClientResponse>的正文作为对象而不是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().header("version").size() == 0 ? getLatestVersion(request) : Integer.parseInt(respData.headers().header("version").get(0)); List converterList; if((converterList = converterSequenceProvider.getConverterList(reqData.getRequestPath(), latestVersion, reqData.getVersion())) != null){ return ResponseEntity.ok().body(respData.bodyToMono(JsonNode.class).map(respBody -> convertToDesiredVersion(converterList, respBody))); } return ResponseEntity.ok().body(respData.bodyToMono(JsonNode.class)); }); }
在此方法中,我的返回类型为Mono <ResponseEntity <Mono <JsonNode >>>,并且我尝试将其转换为Mono <ResponseEntity <JsonNode >>,因为我的团队不同意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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.