【发布时间】:2019-01-17 14:53:01
【问题描述】:
我有一个rest api,它将从网站下载pdf文件,然后将pdf文件返回给调用者。
使用以下代码,我可以从 api 获取Mono<ClientResponse>:
Mono<ClientResponse> requestSpec1 = WebClient
.create()
.method(HttpMethod.GET)
.uri("<url>")
.accept(MediaType.APPLICATION_PDF)
.exchange();
但是,如果我尝试使用 block() 方法从 requestSpec1 获取 ClientResponse,我得到一个异常说 ClientResponse block()/blockFirst()/blockLast() 正在阻塞,这是不支持的在线程中...
谁能帮忙解决这个问题。
【问题讨论】:
-
请将导致问题的代码部分发布在您阻止它的位置
-
@Barath ClientResponse response = requestSpec1.block();
-
理想情况下,您希望它是非阻塞的。有什么理由要阻止它吗?您也可以尝试链接块
.exchange().block()。这里还有一些不错的建议SO。提供你的完整代码,看起来你是在主线程上直接调用块。 -
我使用
block()方法获取ClientResponse对象,然后我可以从中获取pdf文件名、文件正文等。如果没有block()方法,我不知道如何获得那里的信息,这是我的问题。 -
你可以使用
.exchange().flatmap(),然后用它来处理你想要做的事情。
标签: spring spring-webflux project-reactor