簡體   English   中英

Spring WebFlux WebClient:接收部分響應

[英]Spring WebFlux WebClient: receive part of response

我使用WebClient(spring webflux)發送一些信息,並且並不真正在乎響應,只記錄它即可。 如果它很大,我不需要讀取所有內容,而只需讀取500個字節左右。 據我了解,bodyToMono()將整個身體讀入內存。 如何獲得一個身體的開始?

client.post()
   .syncBody(payload)
   .retrieve()
   .bodyToMono(String.class)
   .subscribe( r -> logResponce(r),
               t -> logException(t));

這是我能夠做到的最好成績:

    WebClient client = WebClient.create("http://www.example.com/");
    client.post()
       .syncBody("test")
       .exchange()
       .flatMap(response->response.body((t,m)->t.getBody().next()))
       .subscribe( r -> {
              System.out.println("Available bytes:" + r.readableByteCount());
              final int limit = r.readableByteCount() < 500 ? r.readableByteCount() : 500;
              System.out.println("Limit:" + limit);
              byte[] dst = new byte[limit];
              r.asByteBuffer().get(dst, 0, limit);
              System.out.println("body=" + new String(dst, StandardCharsets.UTF_8));
          },
          t -> System.out.println(t));

它消耗第一個數據塊並打印前500個字符。

暫無
暫無

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

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