簡體   English   中英

Java - 如何以非阻塞方式從 WebClient bodyToMono 或 toEntity 獲取 object

[英]Java - How to get object from WebClient bodyToMono or toEntity in a Non-Blocking way

我是 webclient 的新手。 我有以下使用 webClient 調用端點的方法,並且需要從該方法返回 ResponseEntity 。 我知道我可以調用block() ,但無論如何我可以以非阻塞方式進行嗎? 即使我可以返回Mono ,調用方法仍然需要解包並獲取 ResponseEntity ,調用方法如何調用block

public ResponseEntity getData() {

 Mono<ResponseEntity<String>> entityMono = webClient.post()
                                                    .uri(url)
                                                    .body(BodyInserters.fromValue(aString))
                                                    .retrieve()
                                                    .toEntity(String.class);

  // what do I need to do here so that I can return ResponseEntity non-blocking

 }

如果你想返回一個ResponseEntity沒有其他辦法,你需要block .

這樣想,你做了一個請求,你需要等待響應,直到我們可以構造一個ResponseEntity ,因為我們需要返回的數據,直到我們可以構建它。

如果您正在編寫一個完全非阻塞的應用程序,這很糟糕,因為在所有事情的中間,您基本上都在大喊“停止”,整個應用程序會凍結,直到它得到響應然后繼續。

另一種選擇是返回一個更像 promise 的Mono<ResponseEntity> 你基本上是在說“當我得到答案時,我會 promise 會有一個 ResponseEntity,我只是不知道什么時候所以你現在必須使用 Mono`

然后,您可以使用 map、flatMap、zip 等函數進行提取、轉換、轉換等,但只要您始終返回Mono因為記住,我們基本上沒有構建管道的值希望我們的應用程序在我們真正擁有價值時執行。

我建議您通過Reactor 文檔go 了解反應式編程解決了什么問題,然后如何開始使用它,因為在堆棧溢出的簡單答案中解釋太多了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM