前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring-webflux中Flux<DataBuffer> 转String

spring-webflux中Flux<DataBuffer> 转String

作者头像
天涯泪小武
发布2021-12-09 19:18:17
3.6K0
发布2021-12-09 19:18:17
举报
文章被收录于专栏:SpringCloud专栏SpringCloud专栏

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呢?

代码语言:javascript
复制
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如下:

还有一些其他的方式,如

代码语言:javascript
复制
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的方法,里面有多个方法可以读取里面的值。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-10-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档