diff --git a/spring-web/src/main/java/org/springframework/http/client/JdkClientHttpRequestFactory.java b/spring-web/src/main/java/org/springframework/http/client/JdkClientHttpRequestFactory.java index 14dec7ffa51..b6c25979278 100644 --- a/spring-web/src/main/java/org/springframework/http/client/JdkClientHttpRequestFactory.java +++ b/spring-web/src/main/java/org/springframework/http/client/JdkClientHttpRequestFactory.java @@ -86,7 +86,7 @@ public class JdkClientHttpRequestFactory implements ClientHttpRequestFactory { * @see java.net.http.HttpRequest.Builder#timeout */ public void setReadTimeout(int readTimeout) { - this.readTimeout = Duration.ofMillis(readTimeout); + this.readTimeout = readTimeout == 0 ? null : Duration.ofMillis(readTimeout); } /** @@ -95,7 +95,7 @@ public class JdkClientHttpRequestFactory implements ClientHttpRequestFactory { * @see java.net.http.HttpRequest.Builder#timeout */ public void setReadTimeout(Duration readTimeout) { - this.readTimeout = readTimeout; + this.readTimeout = Duration.ZERO.equals(readTimeout) ? null : readTimeout; } /** diff --git a/spring-web/src/test/java/org/springframework/http/client/JdkClientHttpRequestFactoryTests.java b/spring-web/src/test/java/org/springframework/http/client/JdkClientHttpRequestFactoryTests.java index f82ede88255..f44246b3d8a 100644 --- a/spring-web/src/test/java/org/springframework/http/client/JdkClientHttpRequestFactoryTests.java +++ b/spring-web/src/test/java/org/springframework/http/client/JdkClientHttpRequestFactoryTests.java @@ -19,6 +19,7 @@ package org.springframework.http.client; import java.io.IOException; import java.net.URI; import java.nio.charset.StandardCharsets; +import java.time.Duration; import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.AfterAll; @@ -109,6 +110,28 @@ class JdkClientHttpRequestFactoryTests extends AbstractHttpRequestFactoryTests { } } + @Test + void readTimeoutZeroShouldNotThrowException() throws Exception { + ((JdkClientHttpRequestFactory) factory).setReadTimeout(0); + URI uri = URI.create(this.baseUrl + "/methods/get"); + ClientHttpRequest request = + new BufferingClientHttpRequestFactory(this.factory).createRequest(uri, HttpMethod.GET); + try (ClientHttpResponse response = request.execute()) { + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + } + } + + @Test + void readTimeoutDurationZeroShouldNotThrowException() throws Exception { + ((JdkClientHttpRequestFactory) factory).setReadTimeout(Duration.ZERO); + URI uri = URI.create(this.baseUrl + "/methods/get"); + ClientHttpRequest request = + new BufferingClientHttpRequestFactory(this.factory).createRequest(uri, HttpMethod.GET); + try (ClientHttpResponse response = request.execute()) { + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + } + } + @Test void compressionDisabled() throws IOException { URI uri = URI.create(baseUrl + "/compress/");