From b18e963a10e1bab6b71d37861615f9e78b1a1e76 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Wed, 9 Jul 2025 02:15:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=A5=E5=BF=97=E6=89=93?= =?UTF-8?q?=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gateway/filter/LoggingGlobalFilter.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java b/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java index 2338c2e..04603e4 100644 --- a/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java +++ b/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java @@ -54,7 +54,7 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered { private static class CustomExchange extends ServerWebExchangeDecorator implements CustomExchangeInterface { private final StringBuilder requestBody = new StringBuilder(); - private final StringBuilder responseBody = new StringBuilder(); + private StringBuilder responseBody = new StringBuilder(); public CustomExchange(ServerWebExchange delegate) { super(delegate); @@ -80,23 +80,23 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered { @Override public ServerHttpResponse getResponse() { return new ServerHttpResponseDecorator(super.getResponse()) { + private final StringBuilder responseBodyBuilder = new StringBuilder(); + @Override public Mono writeWith(Publisher body) { if (body instanceof Flux) { - Flux fluxBody = (Flux) body; - return super.writeWith(fluxBody.map(buffer -> { - byte[] content = new byte[buffer.readableByteCount()]; - buffer.read(content); - DataBufferUtils.release(buffer); - - String responseStr = new String(content, StandardCharsets.UTF_8); - responseBody.append(responseStr); - - return buffer.factory().wrap(content); - })); + return super.writeWith(Flux.from(body).doOnNext(this::cacheResponseData)); } return super.writeWith(body); } + + private void cacheResponseData(DataBuffer buffer) { + byte[] content = new byte[buffer.readableByteCount()]; + buffer.read(content); + responseBodyBuilder.append(new String(content, StandardCharsets.UTF_8)); + responseBody = responseBodyBuilder; + DataBufferUtils.release(buffer); // ι‡Šζ”ΎεŽŸε§‹ buffer + } }; }