diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/JdkClientHttpConnector.java b/spring-web/src/main/java/org/springframework/http/client/reactive/JdkClientHttpConnector.java index 5ab354b41ba..35e86847ec8 100644 --- a/spring-web/src/main/java/org/springframework/http/client/reactive/JdkClientHttpConnector.java +++ b/spring-web/src/main/java/org/springframework/http/client/reactive/JdkClientHttpConnector.java @@ -101,13 +101,14 @@ public class JdkClientHttpConnector implements ClientHttpConnector { /** * Set the underlying {@code HttpClient} read timeout as a {@code Duration}. + * A timeout value of 0 specifies an infinite timeout. *

Default is the system's default timeout. * @since 6.2 * @see java.net.http.HttpRequest.Builder#timeout */ public void setReadTimeout(Duration readTimeout) { Assert.notNull(readTimeout, "readTimeout is required"); - this.readTimeout = readTimeout; + this.readTimeout = (Duration.ZERO.equals(readTimeout) ? null : readTimeout); } /** diff --git a/spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java b/spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java index 1a5d3411ada..e99bfcea905 100644 --- a/spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java +++ b/spring-web/src/test/java/org/springframework/http/client/reactive/ClientHttpConnectorTests.java @@ -241,6 +241,19 @@ class ClientHttpConnectorTests { } + @Test + void readTimeoutZeroWithJdk() { + JdkClientHttpConnector connector = new JdkClientHttpConnector(); + connector.setReadTimeout(Duration.ZERO); + + prepareResponse(builder -> builder.code(200)); + Mono futureResponse = + connector.connect(HttpMethod.GET, this.server.url("/").uri(), ReactiveHttpOutputMessage::setComplete); + StepVerifier.create(futureResponse) + .assertNext(response -> assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK)) + .verifyComplete(); + } + private Buffer randomBody(int size) { Buffer responseBody = new Buffer(); Random rnd = new Random();