我正在尝试实现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);