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());
    }
相关推荐
DN20201 分钟前
靠谱的AI销售机器人哪家好
java·人工智能·机器人
黎雁·泠崖7 分钟前
Java继承细节:子类继承父类成员的底层逻辑
java·开发语言
冷雨夜中漫步10 分钟前
Java中strip与trim()的区别
java·开发语言
heartbeat..15 分钟前
Redis 常用命令全解析:基础、进阶与场景化实战
java·数据库·redis·缓存
让我上个超影吧16 分钟前
天机学堂——多级缓存
java·spring boot·spring cloud
Yvonne爱编码30 分钟前
Java 接口学习核心难点深度解析
java·开发语言·python
带刺的坐椅31 分钟前
Solon AI Remote Skills:开启分布式技能的“感知”时代
java·llm·solon·mcp·skills
这周也會开心44 分钟前
SSM 配置 index 页面的实现方式
java·tomcat·springmvc
黎雁·泠崖1 小时前
Java继承入门:概念+特点+核心继承规则
java·开发语言
sheji34161 小时前
【开题答辩全过程】以 小区物业管理APP为例,包含答辩的问题和答案
java