我是Spring Reactive框架的新手&尝试使用Spring5 WebClient进行异步调用。我能够成功地执行与synchronous相同的调用。但是面临着异步调用的问题。
我正在使用下面的代码进行异步调用:
Mono<ClientResponse> reponse = WebClient.builder().build().post()
.uri("http://api.com")
.body(BodyInserters.fromObject("data"))
.accept(MediaType.APPLICATION_JSON)
.header("Authorization", "Bearer blahblahblahblah")
.exchange();
// couple of logger messages and other statements问题是它没有执行API调用,也没有给出响应。它继续执行其他语句,但从不调用API调用。
我不想使用block()方法,因为它会将其转换为同步调用。
我搜索了很多网站和文档,但异步调用使用的是相同的代码。但是不确定为什么它不工作。如果我错过了什么,有人能帮我吗?
发布于 2019-11-20 23:38:59
您需要订阅结果。这可以使用block() call来完成
订阅此单声道并无限期地阻塞,直到接收到下一个信号。返回该值,如果Mono为空,则返回null。在单声道错误的情况下,抛出原始异常(如果它是已检查的异常,则包装在RuntimeException中)。
如果没有订阅,调用将不会按照设计执行。但是,您可以在其他流中传递准备好的单声道来组合它们,但要获得结果,您必须在某个地方调用终止操作。
发布于 2021-06-24 06:32:39
下面的代码可以工作。
Mono<ClientResponse> reponse =
WebClient.builder().build().post()
.uri("http://api.com")
.body(BodyInserters.fromObject("data"))
.accept(MediaType.APPLICATION_JSON)
.header("Authorization", "Bearer blahblahblahblah")
.bodyToMono(ClientResponse.class)
.retrieve();发布于 2021-12-03 16:14:29
您可以使用subscribe ()函数进行异步调用。希望它能起作用..
https://stackoverflow.com/questions/58957969
复制相似问题