当前位置: 首页 > 知识库问答 >
问题:

将Spring Webflux Mono转换为Earth,最好不阻塞?

须巴英
2023-03-14

我正在使用静态编程语言和Arrow以及来自spring-webflow的WebClient。我想做的是将Mono实例转换为要么。

通过调用earth创建earth实例。右(…) 当网络客户端的响应成功时,或当响应成功时。左(…) 当WebClient返回错误时。

我要找的是Mono中的一种方法,类似于这两种方法中的任何一种。折叠(…)在这里,我可以映射成功和错误的结果,并返回与Mono不同的类型。类似这样的代码(不起作用的伪代码):

val either : Either<Throwable, ClientResponse> = 
                   webClient().post().exchange()
                                .fold({ throwable -> Either.left(throwable) },
                                      { response -> Either.right(response)})

一个人应该怎么做?


共有2个答案

燕智
2023-03-14

我不太熟悉Arrow库,也不熟悉它的典型用例,所以我将使用Java片段来说明我的观点。

首先,我想首先指出,这种类型似乎是阻塞的,而不是懒惰的(与Mono不同)。将Mono转换为该类型意味着您将使代码阻塞,并且您不应该这样做,例如,在控制器处理程序的中间,或者您将阻塞整个服务器。

这大致相当于:

Mono<ClientResponse> response = webClient.get().uri("/").exchange();
// blocking; return the response or throws an exception
ClientResponse blockingResponse = response.block();

话虽如此,我认为您应该能够将Mono转换为该类型,方法是在其上调用block()并在其周围调用try/catch块,或将其首先转换为CompletableFuture,例如:

Mono<ClientResponse> response = webClient.get().uri("/").exchange();
Either<Throwable, ClientResponse> either = response
        .toFuture()
        .handle((resp, t) -> Either.fold(t, resp))
        .get();

也许有更好的方法可以做到这一点(尤其是使用内联函数),但它们首先都应该涉及单声道阻塞。

段志
2023-03-14

在单声道上没有折叠方法,但可以使用两种方法来实现相同的效果:map和onErrorResume。应该是这样的:

val either : Either<Throwable, ClientResponse> = 
               webClient().post()
                          .exchange()
                          .map { Either.right(it) }
                          .onErrorResume { Either.left(it).toMono() }

 类似资料:
  • 具有值的表 在存储过程中,我想从表中选择值,然后将其转换为var二进制最大值。我选择: 但是我得到一个错误: 不允许从数据类型varchar隐式转换为var二进制(max)。使用CONVERT函数运行此查询。 请帮我解决这个问题

  • 问题内容: 我需要一个Java库将PDF转换为TIFF图像。PDF是传真,我将转换为TIFF,以便随后可以在图像上进行条形码识别。谁能推荐一个很好的免费开源库,将其从PDF转换为TIFF? 问题答案: 免责声明:我为Atalasoft工作 我们有一个可以将PDF转换为TIFF的SDK。渲染由Foxit软件提供支持,该软件可提供功能强大且高效的PDF渲染器。

  • 请帮我把这个移开。下面是我的代码: 这是我从php文件中得到的json

  • 问题内容: 我正在开发一些应用程序,它允许从SD卡中选择图像,将其保存到数据库中并为ImageView设置此值。我需要知道将uri转换为字符串并将字符串转换为uri的方法。现在,我使用了Uri的getEncodedPath()方法,但是例如,此代码不起作用: 因此,我不知道如何将Uri保存到数据库中并根据保存的值创建新的Uri。请帮我修复它。 问题答案: 我需要知道将uri转换为字符串并将字符串转

  • 问题内容: 我是一名PHP开发人员,在我的一个项目中,我需要将一些HTML文档(大约30至50页)转换为PDF文档。 我的搜索找到了以下可能的解决方案。其中包括一些PHP库和一些命令行应用程序。每种都有自己的优点和缺点。 PHP库: fpdf(需要更多的转换努力) tcpdf(需要更多的转换努力) html2fpdf http://html2fpdf.sourceforge.net html2pd

  • 我正在努力将图像标记转换为链接并复制标记内的参数,即。 进入 我的问题不仅仅是复制src和alt数据,还包括丢失和额外的标记。 进入 和 进入 这需要对整个字符串中img标记的所有实例执行。 不是说听起来像是一个挑战,但是有人能提出一个可能的解决方案吗,我相信这可以用preg_replace但是我就是做不到? 非常感谢。