我是Spring Reactive框架的新手,正在尝试使用Spring5 WebClient进行异步调用。 我能够成功完成与同步相同的呼叫。但是面临异步调用的问题。
我正在使用以下代码进行异步调用:
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()
方法,因为它将转换为同步调用。
我已经搜索了很多网站和文档,但是同一代码用于异步调用。但是不确定为什么它不起作用。如果我想念什么,谁能帮我?
答案 0 :(得分:0)
您需要订阅结果。可以使用block()
call:
订阅此Mono并无限期阻止,直到接收到下一个信号。返回该值;如果Mono完成为空,则返回null。如果发生Mono错误,则会引发原始异常(如果它是检查的异常,则包装在RuntimeException中)。
没有订阅,该呼叫不是设计执行的。但是,您可以在其他流中传递准备好的单声道以将它们合并,但是要获得结果,您必须在某个地方调用终止操作。
答案 1 :(得分:0)
下面的代码可以工作。
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();