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; } }