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());
    }
相关推荐
写代码写到手抽筋6 小时前
5G上行DCI字段判定:端口 流数 PMI选择详解
java·算法·5g
xieliyu.6 小时前
Java算法精讲:双指针(二)
java·开发语言·算法
jeffer_liu6 小时前
Spring AI 生产级实战:裁判员
java·人工智能·后端·spring·大模型
小bo波7 小时前
枚举实战
java·设计模式·枚举·后端开发·代码重构
夜微凉47 小时前
三、Spring
java·后端·spring
橘右今7 小时前
2026 Java后端高频面试宝典
java·开发语言·面试
xyzzklk8 小时前
解决Salesforce无法向外发送邮件
android·java·开发语言·网络·crm·salesforce·客户关系管理
biubiubiu07069 小时前
SpringBoot关于外部化配置
java·spring boot·spring
zzz_23689 小时前
【Spring】面试突击系列(二):SpringBoot 入门与自动配置原理
java·spring boot·spring