本文主要是介绍spring-webflux中FluxDataBuffer 转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 bodyString bodyStr = bodyRef.get();System.out.println(bodyStr);
大家可以去看一下DataBuffer的方法,里面有多个方法可以读取里面的值。
这篇关于spring-webflux中FluxDataBuffer 转String的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!