From bb92857db9502fcfbdc1fbe8b3442cc284d1b869 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Mon, 8 Sep 2025 17:29:32 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BD=91=E5=85=B3=E6=97=A5=E5=BF=97=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gateway/filter/LoggingGlobalFilter.java | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java b/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java index 6130b79..fdebebf 100644 --- a/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java +++ b/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java @@ -20,6 +20,7 @@ import org.springframework.web.server.ServerWebExchangeDecorator; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.UUID; @@ -64,7 +65,8 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered { private static class CustomExchange extends ServerWebExchangeDecorator implements CustomExchangeInterface { private final StringBuilder requestBody = new StringBuilder(); - private String responseBody; + private final StringBuilder responseBodyBuilder = new StringBuilder(); + public CustomExchange(ServerWebExchange delegate) { @@ -88,25 +90,24 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered { }; } + @Override public ServerHttpResponse getResponse() { - return new ServerHttpResponseDecorator(super.getResponse()) { - private final StringBuilder responseBodyBuilder = new StringBuilder(); + ServerHttpResponse originalResponse = super.getResponse(); + DataBufferFactory bufferFactory = originalResponse.bufferFactory(); + return new ServerHttpResponseDecorator(originalResponse) { @Override public Mono writeWith(Publisher body) { if (body instanceof Flux) { - return super.writeWith(Flux.from(body) - .doOnNext(buffer -> { - DataBufferUtils.join(Flux.just(buffer)) - .map(dataBuffer -> { - byte[] content = new byte[dataBuffer.readableByteCount()]; - dataBuffer.read(content); - responseBody = new String(content, StandardCharsets.UTF_8); - return dataBuffer; - }) - .subscribe(); - })); + Flux flux = (Flux) body; + return super.writeWith(flux.doOnNext(dataBuffer -> { + byte[] bytes = new byte[dataBuffer.readableByteCount()]; + dataBuffer.read(bytes); + String bodyContent = new String(bytes, StandardCharsets.UTF_8); + responseBodyBuilder.append(bodyContent); + DataBufferUtils.release(dataBuffer); + }).map(bytes -> bufferFactory.wrap((ByteBuffer) bytes))); } return super.writeWith(body); } @@ -120,7 +121,7 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered { @Override public String getResponseBody() { - return responseBody; + return responseBodyBuilder.toString(); } }