1. 程式人生 > >spring-webflux中Flux 轉String

spring-webflux中Flux 轉String

Spring WebFlux既支援像Tomcat,Jetty這樣的的傳統容器(前提是支援Servlet 3.1 Non-Blocking IO API),又支援像Netty,Undertow那樣的非同步容器。不管是何種容器,Spring WebFlux都會將其輸入輸出流適配成Flux<DataBuffer>格式,以便進行統一處理。
在使用SpringCloud-gateway時,在各個filter裡,都有ServerWebExchange物件,exchange裡面攜帶著使用者的request,request裡帶著使用者請求的資料。

如果是Get請求傳的引數,我們可以直接通過下圖紅框這樣的方式獲取引數的值,但是post請求的值就取不到了。

post的值都封裝在了 Flux<DataBuffer> 物件中,那麼我們怎麼將它轉為可讀的String呢?

Flux<DataBuffer> body = exchange.getRequest().getBody();

        body.subscribe(buffer -> {
            byte[] bytes = new byte[buffer.readableByteCount()];
            buffer.read(bytes);
            DataBufferUtils.release(buffer);
            try {
                String bodyString = new String(bytes, "utf-8");
                System.out.println(bodyString);
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        });

這裡面就是一種方式,post傳的引數如下

上面程式碼處理後的bodyString如下:

還有一些其他的方式,如

AtomicReference<String> bodyRef = new AtomicReference<>();
        body.subscribe(buffer -> {
            CharBuffer charBuffer = StandardCharsets.UTF_8.decode(buffer.asByteBuffer());
            DataBufferUtils.release(buffer);
            bodyRef.set(charBuffer.toString());
        });
        //獲取request body
        String bodyStr = bodyRef.get();
        System.out.println(bodyStr);

大家可以去看一下DataBuffer的方法,裡面有多個方法可以讀取裡面的值。

相關推薦

spring-webfluxFlux String

Spring WebFlux既支援像Tomcat,Jetty這樣的的傳統容器(前提是支援Servlet 3.1 Non-Blocking IO API),又支援像Netty,Undertow那樣的非同步容器。不管是何種容器,Spring WebFlux都會將其輸入輸出流適配成

javaObjectString

使用方法 ava 導致 相同 存在 應用 一定的 關系 als Object轉為String的幾種形式 在java項目的實際開發和應用中,常常需要用到將對象轉為String這一基本功能。本文將對常用的轉換方法進行一個總結。常用的方法有Object.toString(),(

java型別string的一些方法和區別

在java專案開發中,常常用到一些將型別轉換為string的功能,特地做個總結。 1.(String)要轉換的物件 這是標準的型別轉換,將object轉成String型別的值。使用這種方法時,需要注意的是型別必須能轉成String型別。因此最好用instanceof做個型別檢查,以判斷是否可

spring security 在 spring webflux 的使用

spring5增加了reactive web模組,相應的在spring security中也增加了 [webflux-web-security] 模組,相對於spring security 在配置和使用方面有略微的差異,下面主要說明簡單的配置和自定義使用者資訊的配置。 1、基本配置 impo

spring-security 在 spring webflux 的使用

spring security 在 spring webflux 中的使用 spring5增加了reactive web模組,相應的在spring security中也增加了 [webflux-web-security] 模組,相對於spring secur

C/C++ int stringstring int 的幾種方法

C int 轉 string sprintf int a = 1; char strDst[256] = {0}; sprintf_s(strDst,256,"%d",a); itoa int

Solidityuintstring

  在《Solidity中uint轉bytes》中,我們知道unit如何轉換成bytes,其實把uint轉換成string,就是在最後加上string(bytes變數)即可,如下所示: pragma solidity ^0.4.2; contract Test { function toBytesNic

spring-mvc自動json問題

記錄是為了更好的成長! 在專案中經常要進行返回值轉json,但是我在配置的出現不能轉換的問題,花了很多時間終於搞定,簡單記錄如下: 1、第一種配置,也是我最開始的配置方式,一直不生效,配置如下: (1)pom.xml引入fastjson依賴 (2)配置sping.xml,在網上看到的也都是這種配置

Android -Javabyte[]String問題

     最近的專案中要使用到把byte[]型別轉換成String字串然後通過網路傳送,但發現發現出去的字串和獲取的字串雖然是一樣的,但當用String的getBytes()的方法得到的byte[]跟原來的byte[]是不一樣的。 看如下程式碼: bytebytes

Spring Boot 實踐折騰記(17):Spring WebFlux的函數語言程式設計模型

楊絳先生說:大部分人的問題是,做得不多而想得太多。 今天要講的函數語言程式設計可能和Spring Boot本身的關係不太大,但是它很重要!不僅是因為從Java 7升級到Java 8多了一種新程式設計語法的支援,更因為這是一種不同的思維模式。同時,今天的內容可能

javaintstringstringint效率對比

string轉int,兩種方法: 1、Interger.parseInt(String) 2、Interger.valueOf(String).intValue() 第二種方法可以去看原始碼,實現了第一種方法。 註釋大概就是這樣的意思 /**       *返回一個包含整

如何在Spring Boot智慧合約

本文是由鏈博科技 ChainBoard.IO 為大家帶來的web3j 對智慧合約的呼叫。讓 ja

spring-boot實戰【07】【】:Spring BootWeb應用的統一異常處理

http integer private fin ima lex clas 友好 ref 我們在做Web應用的時候,請求處理過程中發生錯誤是非常常見的情況。Spring Boot提供了一個默認的映射:/error,當處理中拋出異常之後,會轉到該請求中處理,並且該請求有一個全

spring-boot實戰【06】【】:Spring Boot使用Swagger2

des values 產生 service sof div 解決 整合 data 由於Spring Boot能夠快速開發、便捷部署等特性,相信有很大一部分Spring Boot的用戶會用來構建RESTful API。而我們構建RESTful API的目的通常都是由於多終端的

[]使用@Test 也可以從spring容器獲取依賴註入

oca fig article ring1 detail ice 如果 text resource 轉自:http://blog.csdn.net/u010987379/article/details/52091790 @RunWith(SpringJUnit4Cla

Spring MVC@RequestParam/@RequestBody/@RequestHeader的用法收集(

writer) public target load spa ive com query 我們 簡介: handler method參數綁定常用的註解,我們根據他們處理的Request的不同內容部分分為四類:(主要講解常用類型) A、處理requet uri部分(這裏指

微服務實施Spring Cloud踩過的坑(

div href 發現 .wang blog log ring clas bds http://tietang.wang/2016/09/08/%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%BE%AE%E6%9C%8D%E5%8A%A1%E5%AE%9E%

Spring Boot使用Spring-data-jpa實現分頁查詢(

分頁查詢 log def inpu database ext identity odin btn 在我們平時的工作中,查詢列表在我們的系統中基本隨處可見,那麽我們如何使用jpa進行多條件查詢以及查詢列表分頁呢?下面我將介紹兩種多條件查詢方式。 1、引入起步依賴

Java 要將 String 類型化為 int 類型

ava index 需要 amp con 轉換 catch div 出現 在 Java 中要將 String 類型轉化為 int 類型時,需要使用 Integer 類中的 parseInt() 方法或者 valueOf() 方法進行轉換. 例1: 1 2 3 4 5

Spring配置的"classpath:"與"classpath*:"的區別研究(

onf 文件夾 spa 作用 XML ner ron style 多個 概念解釋及使用場景: classpath是指WEB-INF文件夾下的classes目錄。 通常我們一般使用這種寫法實在web.xml中,比如spring加載bean的上下文時,如下: <!--系