From 15dcc449a26333c8b1637e86aac76cd685a6ed0c Mon Sep 17 00:00:00 2001 From: rstoyanchev Date: Mon, 2 Dec 2024 17:52:39 +0000 Subject: [PATCH] Refine Reactor Netty handling of request without body Closes gh-34003 --- .../springframework/http/client/ReactorClientHttpRequest.java | 4 +++- .../http/client/reactive/ReactorClientHttpRequest.java | 4 +++- .../http/client/reactive/ReactorNetty2ClientHttpRequest.java | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/client/ReactorClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/ReactorClientHttpRequest.java index 4db43942fde..feddda57a76 100644 --- a/spring-web/src/main/java/org/springframework/http/client/ReactorClientHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/client/ReactorClientHttpRequest.java @@ -145,7 +145,9 @@ final class ReactorClientHttpRequest extends AbstractStreamingClientHttpRequest headers.forEach((key, value) -> request.requestHeaders().set(key, value)); if (body == null) { - return outbound; + // NettyOutbound#subscribe calls then() and that expects a body + // Use empty Mono instead for a more optimal send + return Mono.empty(); } AtomicReference executorRef = new AtomicReference<>(); diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorClientHttpRequest.java index 83e081c3c9b..646ba71adf0 100644 --- a/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorClientHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorClientHttpRequest.java @@ -120,7 +120,9 @@ class ReactorClientHttpRequest extends AbstractClientHttpRequest implements Zero @Override public Mono setComplete() { - return doCommit(this.outbound::then); + // NettyOutbound#then() expects a body + // Use null as the write action for a more optimal send + return doCommit(null); } @Override diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorNetty2ClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorNetty2ClientHttpRequest.java index c24ec75ecea..f8fab77ba67 100644 --- a/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorNetty2ClientHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorNetty2ClientHttpRequest.java @@ -123,7 +123,9 @@ class ReactorNetty2ClientHttpRequest extends AbstractClientHttpRequest implement @Override public Mono setComplete() { - return doCommit(this.outbound::then); + // NettyOutbound#then() expects a body + // Use null as the write action for a more optimal send + return doCommit(null); } @Override