如何从 Mono<ClientResponse> 获取正文?

     2023-02-27     147

关键词:

【中文标题】如何从 Mono<ClientResponse> 获取正文?【英文标题】:How to get body from Mono<ClientResponse>? 【发布时间】:2019-11-01 20:43:36 【问题描述】:

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

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

public Mono&ltResponseEntity&ltMono&ltJsonNode&gt&gt&gt processUnmappedApiRequest(ServerHttpRequest request, JsonNode body) RequestData reqData = this.prepareReqMetadata(request, body); Mono&ltClientResponse&gt 响应 = commonConnector.getApiResponse(reqData); 返回 response.map(respData -> int latestVersion = respData.headers().header("version").size() == 0 ?获取最新版本(请求): 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 方法。

请帮帮我。

【问题讨论】:

【参考方案1】:

如果您试图只返回一个Mono 对象,您可以使用flatMap 方法而不是map,这样您就可以避免使用Mono&lt;Mono&lt;X&gt;&gt; 之类的东西而只获得Mono&lt;X&gt;

map

通过应用同步转换此 Mono 发出的项目 对它起作用。

flatMap

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

另外,ServerResponse.BodyBuildersyncBody 上有一个方法可以获取正常的身体并在Mono 中返回它。映射函数的参数已经是一个未包装的对象,所以你可以这样做:

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

【讨论】:

我很高兴它能正常工作,您能接受这个答案吗?

无法从 Flux<PortCall> 转换为 Mono<?扩展对象>

】无法从Flux<PortCall>转换为Mono<?扩展对象>【英文标题】:CannotconvertfromFlux<PortCall>toMono<?extendsObject>【发布时间】:2021-05-0422:44:53【问题描述】:publicFlux<PortCall>updateByFindById(StringgsisKey,PortCallportCal 查看详情

如何返回 Mono<ServerResponse>

】如何返回Mono<ServerResponse>【英文标题】:HowtoreturnMono<ServerResponse>【发布时间】:2021-09-0922:24:42【问题描述】:请参阅下面代码的cmets部分中嵌入的我的问题-//Thisshouldreturnalistofallidsandtheirnameandstatusinfo,e.g.asjsonpublicMono<... 查看详情

合并两个 Mono 并获得一个 Flux。然后从那个 Flux 中提取一个 Mono

】合并两个Mono并获得一个Flux。然后从那个Flux中提取一个Mono【英文标题】:MergingtwoMonoandgettingaFlux.ThenextractingaMonofromthatFlux【发布时间】:2021-07-3107:14:16【问题描述】:我有两个Mono&lt;T&gt;,我从两个不同的来源让我们说KAFK... 查看详情

如何从返回 Mono 的 Stream 创建 Flux? [复制]

】如何从返回Mono的Stream创建Flux?[复制]【英文标题】:HowtocreateFluxfromaStreamthatreturnsMono?[duplicate]【发布时间】:2020-11-1905:34:33【问题描述】:假设我有一个带有(CourseID,Name)的课程名称对象列表。让我们将该列表称为“courseNameList... 查看详情

如何从 Spring Flux 平面图操作中返回对象

】如何从SpringFlux平面图操作中返回对象【英文标题】:HowtoreturnaobjectfromSpringFluxflatmapoperation【发布时间】:2021-08-0306:16:56【问题描述】:我希望在保存文件后返回Mono.just(file.getAbsolutePath())。以下是我的代码:publicMono<String>sa... 查看详情

如何在 Mono<ResponseEntity> 中正确返回 HttpStatus?

】如何在Mono<ResponseEntity>中正确返回HttpStatus?【英文标题】:HowtoproperlyreturnHttpStatusinMono<ResponseEntity>?【发布时间】:2018-12-0703:10:12【问题描述】:我有一个返回一些HttpStatus代码的api。并且根据代码,看门人将执行一些... 查看详情

如何将返回 `void` 的同步方法包装到 Mono<Void> 中?

】如何将返回`void`的同步方法包装到Mono<Void>中?【英文标题】:Howtowrapsynchronousmethodthatreturns`void`intoMono<Void>?【发布时间】:2020-12-0713:25:26【问题描述】:我正在尝试调整返回void的postgresql存储库deleteById方法以返回Mono&am... 查看详情

如何在反应式 Java 中从 Mono<String> 获取字符串

】如何在反应式Java中从Mono<String>获取字符串【英文标题】:HowtogetStringfromMono<String>inreactivejava【发布时间】:2018-04-2103:41:27【问题描述】:我有一个接受Mono作为参数的方法。我想要的只是从中获取实际的字符串。谷歌... 查看详情

Spring Webflux:从 Mono 中提取价值

】SpringWebflux:从Mono中提取价值【英文标题】:SpringWebflux:ExtractvaluefromMono【发布时间】:2020-04-3014:20:36【问题描述】:我是springwebflux的新手,正在尝试对两个单声道的值执行一些算术运算。我有一个产品服务,它通过webClient调... 查看详情

使用 Spring WebFlux 为 Mono<Entity> 添加价值

】使用SpringWebFlux为Mono<Entity>添加价值【英文标题】:AddvaluetoaMono<Entity>withSpringWebFlux【发布时间】:2022-01-0218:14:51【问题描述】:我需要将属性Friends(这是一个ArrayList)从Mono&lt;PersonEntity&gt;复制到Mono&lt;UserEntity... 查看详情

如何使用 Mono<String> 处理逗号分隔的 id 字符串

】如何使用Mono<String>处理逗号分隔的id字符串【英文标题】:HowtoprocesscommaseparatedstringofidsusingMono<String>【发布时间】:2021-09-0921:33:42【问题描述】:我有一个api,它给了我一个逗号分隔的id列表,我正在使用SpringBootWebClie... 查看详情

如何在 spring boot webflux 上从 mono<user> 获取用户名?

】如何在springbootwebflux上从mono<user>获取用户名?【英文标题】:Howtogetusernamefrommono<user>onspringbootwebflux?【发布时间】:2019-11-1119:27:17【问题描述】:我尝试制作SpringBootwebflux的处理程序和路由器类。模型类是用户类。代... 查看详情

如何将 Mono<List<String>> 转换为 Flux<String>

】如何将Mono<List<String>>转换为Flux<String>【英文标题】:HowtoconvertMono<List<String>>intoFlux<String>【发布时间】:2017-06-1920:33:17【问题描述】:我正在将用RxJava1.x编写的小项目转换为Reactor3.x。一切都很好,除... 查看详情

单线程 Flux 中的 Mono

】单线程Flux中的Mono【英文标题】:MonoinFluxbysinglethread【发布时间】:2018-07-1506:01:57【问题描述】:我有来自db的Flux&lt;Foo&gt;(例如5个元素)。我需要从每个Foo中获取一些信息,将其全部设置为Mono&lt;MyRequest&gt;,发送... 查看详情

如何在windows上构建mono3.4.0/3.4.1

参考技术A我们现从当前的版本(当我写这篇文章时,Mono发布的版本是3.4.0)构建,然后再从git的代码库中构建最新的版本。主要步骤如下:安装预编译的Mono安装&配置Cygwin下载并解压Mono的源代码构建Mono修改Cygwin/Mono来解决构建... 查看详情

spring webflux:如何使用正文插入器在响应正文中发送 Mono<T>

】springwebflux:如何使用正文插入器在响应正文中发送Mono<T>【英文标题】:springwebflux:howtosendMono<T>inresponsebodywithbodyinserters【发布时间】:2018-06-0607:16:49【问题描述】:该文档说:https://docs.spring.io/spring/docs/current/spring-fram... 查看详情

从 Mono 的列表中创建 Flux 的正确方法

...对象中的每一个,它都会调用一个创建Mono的服务方法。如何以惯用且非阻塞的方式从这些Mono对象创建Flux?我现在想出的是这个。我更改了方法名称以更好地反映其预期目的。funmyApiM 查看详情

如何在 Spring Webflux 中返回 Mono<Map<String, Flux<Integer>>> 响应?

】如何在SpringWebflux中返回Mono<Map<String,Flux<Integer>>>响应?【英文标题】:HowcanIreturnaMono<Map<String,Flux<Integer>>>responseinSpringWebflux?【发布时间】:2018-12-1916:49:51【问题描述】:所以现在,我返回的响应看起... 查看详情