Skip to content

Commit 022f3cb

Browse files
committed
Add requestFactorySettings method to RestTemplateBuilder
Add a `requestFactorySettings` method to `RestTemplateBuilder` to make it easier to apply an existing `ClientHttpRequestFactorySettings` instance. Closes gh-42885
1 parent 3679127 commit 022f3cb

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/RestTemplateBuilder.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,22 @@ this.errorHandler, this.basicAuthentication, append(this.defaultHeaders, name, v
429429
this.customizers, this.requestCustomizers);
430430
}
431431

432+
/**
433+
* Sets the {@link ClientHttpRequestFactorySettings}. This will replace any previously
434+
* set {@link #connectTimeout(Duration) connectTimeout} ,{@link #readTimeout(Duration)
435+
* readTimeout} and {@link #sslBundle(SslBundle) sslBundle} values.
436+
* @param requestFactorySettings the request factory settings
437+
* @return a new builder instance
438+
* @since 3.4.0
439+
*/
440+
public RestTemplateBuilder requestFactorySettings(ClientHttpRequestFactorySettings requestFactorySettings) {
441+
Assert.notNull(requestFactorySettings, "ClientHttpRequestFactorySettings must not be null");
442+
return new RestTemplateBuilder(requestFactorySettings, this.detectRequestFactory, this.rootUri,
443+
this.messageConverters, this.interceptors, this.requestFactoryBuilder, this.uriTemplateHandler,
444+
this.errorHandler, this.basicAuthentication, this.defaultHeaders, this.customizers,
445+
this.requestCustomizers);
446+
}
447+
432448
/**
433449
* Sets the connection timeout on the underlying {@link ClientHttpRequestFactory}.
434450
* @param connectTimeout the connection timeout

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTests.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.net.URI;
2020
import java.nio.charset.StandardCharsets;
21+
import java.time.Duration;
2122
import java.util.Arrays;
2223
import java.util.Collections;
2324
import java.util.Set;
@@ -30,6 +31,7 @@
3031
import org.mockito.Mock;
3132
import org.mockito.junit.jupiter.MockitoExtension;
3233

34+
import org.springframework.boot.http.client.ClientHttpRequestFactorySettings;
3335
import org.springframework.http.HttpHeaders;
3436
import org.springframework.http.HttpMethod;
3537
import org.springframework.http.MediaType;
@@ -272,9 +274,8 @@ void requestFactoryWhenSupplierIsNullShouldThrowException() {
272274

273275
@Test
274276
void requestFactoryWhenFunctionIsNullShouldThrowException() {
275-
assertThatIllegalArgumentException()
276-
.isThrownBy(() -> this.builder
277-
.requestFactory((Function<ClientHttpRequestFactorySettings, ClientHttpRequestFactory>) null))
277+
assertThatIllegalArgumentException().isThrownBy(() -> this.builder.requestFactory(
278+
(Function<org.springframework.boot.web.client.ClientHttpRequestFactorySettings, ClientHttpRequestFactory>) null))
278279
.withMessageContaining("RequestFactoryFunction must not be null");
279280
}
280281

@@ -343,6 +344,14 @@ void defaultHeaderWhenUsingMockRestServiceServerAddsHeader() {
343344
assertThat(request.getHeaders()).contains(entry("spring", Collections.singletonList("boot")));
344345
}
345346

347+
@Test
348+
void requestFactorySettingsAppliesSettings() {
349+
ClientHttpRequestFactorySettings settings = ClientHttpRequestFactorySettings.defaults()
350+
.withConnectTimeout(Duration.ofSeconds(1));
351+
RestTemplate template = this.builder.requestFactorySettings(settings).build();
352+
assertThat(template.getRequestFactory()).extracting("connectTimeout").isEqualTo(1000L);
353+
}
354+
346355
@Test
347356
void requestCustomizersAddsCustomizers() {
348357
RestTemplate template = this.builder

0 commit comments

Comments
 (0)