springgateway网关修改响应后,部分中文乱码问题

原因

是因为响应体过大,开启了压缩,数据分段进行响应得,导致处理返回体得时候乱码

解决方式

复制代码
@Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse originalResponse = exchange.getResponse();
        DataBufferFactory bufferFactory = originalResponse.bufferFactory();
        ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {
            @Override
            public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {

                if (getStatusCode() != null && getStatusCode().equals(HttpStatus.OK) && body instanceof Flux) {
                    Flux<? extends DataBuffer> fluxBody = Flux.from(body);
                    return super.writeWith(fluxBody.buffer().map(dataBuffers -> {
                        DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory();
                        DataBuffer join = dataBufferFactory.join(dataBuffers);
                        byte[] content = new byte[join.readableByteCount()];
                        join.read(content);
                        DataBufferUtils.release(join);
                        //完整得响应体
                        String responseData = new String(content, StandardCharsets.UTF_8);
                        return bufferFactory.wrap(responseData.getBytes(StandardCharsets.UTF_8));
                    }));
                }
                return super.writeWith(body);
            }
        };
        return chain.filter(exchange.mutate().response(decoratedResponse).build());
    }
相关推荐
编程大师哥4 分钟前
Java web
java·开发语言·前端
电商API_1800790524710 分钟前
大麦网API实战指南:关键字搜索与详情数据获取全解析
java·大数据·前端·人工智能·spring·网络爬虫
dasi022710 分钟前
Java 趣闻
java
C雨后彩虹11 分钟前
synchronized高频考点模拟面试过程
java·面试·多线程·并发·lock
JAVA+C语言12 分钟前
Java ThreadLocal 的原理
java·开发语言·python
lkbhua莱克瓦2419 分钟前
进阶-SQL优化
java·数据库·sql·mysql·oracle
行稳方能走远27 分钟前
Android java 学习笔记 1
android·java
kaico201828 分钟前
多线程与微服务下的事务
java·微服务·架构
zhglhy28 分钟前
QLExpress Java动态脚本引擎使用指南
java
小瓦码J码29 分钟前
使用AWS SDK实现S3桶策略配置
java