[英]How to make an asynchronous call using Spring5 WebClient
我是 Spring 反應式框架的新手,並嘗試使用 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()
方法,因為它會將其轉換為同步調用。
我搜索了很多網站和文檔,但相同的代碼用於異步調用。 但不確定為什么它不起作用。 如果我錯過任何事情,誰能幫助我?
您需要訂閱結果。 這可以通過block()
調用來完成:
訂閱此 Mono 並無限期阻止,直到收到下一個信號。 如果 Mono 為空,則返回該值或 null。 如果出現 Mono 錯誤,則會引發原始異常(如果是已檢查異常,則將其包裝在 RuntimeException 中)。
如果沒有訂閱,則不會按設計執行調用。 但是,您可以在其他 stream 中傳遞准備好的 mono 以組合它們,但要獲得結果,您必須在某處調用終止操作。
下面的代碼可以工作。
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();
您可以使用 subscribe () function 進行異步調用。 希望它有效..
使用下面的代碼,它解決了你的問題。
String response = WebClient.builder().build()
.post()
.uri("http://api.com")
.header("Authorization", "Bearer yourtoken")
.body(Mono.just(body), BodyClassName.class)
.retrieve()
.bodyToMono(String.class).block();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.