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());
    }
相关推荐
醇氧几秒前
在 Spring Service 中使用 private final Gson gson = new Gson(); 是否安全?
java·安全·spring
CodeAmaz5 分钟前
InnoDB的MVCC机制
java·数据库·mvcc
CoderYanger21 分钟前
贪心算法:4.摆动序列
java·算法·leetcode·贪心算法·1024程序员节
默 语32 分钟前
Spring-AI vs LangChain4J:Java生态的AI框架选型指南
java·人工智能·spring·ai·langchain·langchain4j·spring-ai
kk哥88991 小时前
springboot静态资源的核心映射规则
java·spring boot·后端
老毛肚1 小时前
Java两种代理模式详解
java·开发语言·代理模式
要站在顶端1 小时前
Jenkins PR编号提取&环境变量赋值问题总结
java·servlet·jenkins
愚公移码1 小时前
蓝凌EKP产品:Hibernate 中 SessionFactory、Session 与事务的关系
java·数据库·hibernate·蓝凌
TT哇1 小时前
【每日八股】面经常考
java·面试
何中应1 小时前
【面试题-4】JVM
java·jvm·后端·面试题