我正在尝试实现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().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
所以这里的重点是我不想使用bodyToMono方法,并且不确定如何使用body方法。
请在这里帮助我。
答案 0 :(得分:0)
如果您尝试仅返回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);