springgateway网关修改响应后,部分中文乱码问题
原因
是因为响应体过大,开启了压缩,数据分段进行响应得,导致处理返回体得时候乱码
解决方式
@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest();ServerHttpResponse originalResponse = exchange.getResponse();DataBufferFactory bufferFactory = originalResponse.bufferFactory();ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {@Overridepublic 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());}