From ed65a1f61794bd6c4e983e7ef827a1752ca59b44 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Wed, 9 Jul 2025 02:48:23 +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 | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java b/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java index 3b9b09e..1430d8f 100644 --- a/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java +++ b/src/main/java/com/sczx/gateway/filter/LoggingGlobalFilter.java @@ -55,7 +55,8 @@ 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 String responseBody; + public CustomExchange(ServerWebExchange delegate) { super(delegate); @@ -81,21 +82,22 @@ 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.from(body); - return super.writeWith(fluxBody + return super.writeWith(Flux.from(body) .doOnNext(buffer -> { - byte[] content = new byte[buffer.readableByteCount()]; - buffer.read(content); - String responseStr = new String(content, StandardCharsets.UTF_8); - responseBody.append(responseStr); - DataBufferUtils.release(buffer); - }) - .doOnComplete(() -> { - // 响应流完成后再赋值,确保完整性 - log.debug("✅ 完整响应内容: {}", responseBody.toString()); + DataBufferUtils.join(Flux.just(buffer)) + .map(dataBuffer -> { + byte[] content = new byte[dataBuffer.readableByteCount()]; + dataBuffer.read(content); + String bodyStr = new String(content, StandardCharsets.UTF_8); + responseBody = bodyStr; + return dataBuffer; + }) + .subscribe(); })); } return super.writeWith(body); @@ -110,7 +112,7 @@ public class LoggingGlobalFilter implements GlobalFilter, Ordered { @Override public String getResponseBody() { - return responseBody.toString(); + return responseBody; } }