Skip to content

Commit 8b83afd

Browse files
committed
Polish 'Add redirects(...) method to RestTemplateBuilder'
Remove deprecations and new methods in `TestRestTemplate` in favor of passing in a configured `RestTemplateBuilder`. See gh-43258
1 parent f450b28 commit 8b83afd

File tree

2 files changed

+43
-33
lines changed

2 files changed

+43
-33
lines changed

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

-19
Original file line numberDiff line numberDiff line change
@@ -948,22 +948,6 @@ public TestRestTemplate withBasicAuth(String username, String password) {
948948
return template;
949949
}
950950

951-
/**
952-
* Creates a new {@code TestRestTemplate} with the same configuration as this one,
953-
* except that it will use the given {@code redirects} strategies. The request factory
954-
* used is a new instance of the underlying {@link RestTemplate}'s request factory
955-
* type (when possible).
956-
* @param redirects the redirects
957-
* @return the new template
958-
* @since 3.4.1
959-
*/
960-
public TestRestTemplate withRedirects(Redirects redirects) {
961-
TestRestTemplate template = new TestRestTemplate(this.builder.redirects(redirects), null, null,
962-
this.httpClientOptions);
963-
template.setUriTemplateHandler(getRestTemplate().getUriTemplateHandler());
964-
return template;
965-
}
966-
967951
@SuppressWarnings({ "rawtypes", "unchecked" })
968952
private RequestEntity<?> createRequestEntityWithRootAppliedUri(RequestEntity<?> requestEntity) {
969953
return new RequestEntity(requestEntity.getBody(), requestEntity.getHeaders(), requestEntity.getMethod(),
@@ -1006,10 +990,7 @@ public enum HttpClientOption {
1006990

1007991
/**
1008992
* Enable redirects.
1009-
* @deprecated since 3.4.1 for removal in 3.6.0 in favor of
1010-
* {@link #withRedirects(Redirects)}
1011993
*/
1012-
@Deprecated(since = "3.4.1", forRemoval = true)
1013994
ENABLE_REDIRECTS,
1014995

1015996
/**

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

+43-14
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,15 @@
2020
import java.lang.reflect.Method;
2121
import java.lang.reflect.Modifier;
2222
import java.net.URI;
23+
import java.net.http.HttpClient;
24+
import java.net.http.HttpClient.Redirect;
2325
import java.util.Base64;
2426
import java.util.stream.Stream;
2527

2628
import org.apache.hc.client5.http.config.RequestConfig;
2729
import org.junit.jupiter.api.Test;
2830

31+
import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder;
2932
import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects;
3033
import org.springframework.boot.test.web.client.TestRestTemplate.CustomHttpComponentsClientHttpRequestFactory;
3134
import org.springframework.boot.test.web.client.TestRestTemplate.HttpClientOption;
@@ -39,6 +42,7 @@
3942
import org.springframework.http.client.ClientHttpRequest;
4043
import org.springframework.http.client.ClientHttpRequestFactory;
4144
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
45+
import org.springframework.http.client.JdkClientHttpRequestFactory;
4246
import org.springframework.http.client.SimpleClientHttpRequestFactory;
4347
import org.springframework.mock.env.MockEnvironment;
4448
import org.springframework.mock.http.client.MockClientHttpRequest;
@@ -131,30 +135,55 @@ void authenticated() {
131135
assertBasicAuthorizationCredentials(restTemplate, "user", "password");
132136
}
133137

134-
@SuppressWarnings("deprecation")
135138
@Test
136139
void options() {
137-
TestRestTemplate template = new TestRestTemplate(HttpClientOption.ENABLE_REDIRECTS);
138-
CustomHttpComponentsClientHttpRequestFactory factory = (CustomHttpComponentsClientHttpRequestFactory) template
139-
.getRestTemplate()
140-
.getRequestFactory();
141-
RequestConfig config = factory.createRequestConfig();
140+
RequestConfig config = getRequestConfig(
141+
new TestRestTemplate(HttpClientOption.ENABLE_REDIRECTS, HttpClientOption.ENABLE_COOKIES));
142142
assertThat(config.isRedirectsEnabled()).isTrue();
143+
assertThat(config.getCookieSpec()).isEqualTo("strict");
143144
}
144145

145146
@Test
146-
void redirects() {
147-
TestRestTemplate template = new TestRestTemplate().withRedirects(Redirects.DONT_FOLLOW);
147+
void jdkBuilderCanBeSpecifiedWithSpecificRedirects() {
148+
RestTemplateBuilder builder = new RestTemplateBuilder()
149+
.requestFactoryBuilder(ClientHttpRequestFactoryBuilder.jdk());
150+
TestRestTemplate templateWithRedirects = new TestRestTemplate(builder.redirects(Redirects.FOLLOW));
151+
assertThat(getJdkHttpClient(templateWithRedirects).followRedirects()).isEqualTo(Redirect.NORMAL);
152+
TestRestTemplate templateWithoutRedirects = new TestRestTemplate(builder.redirects(Redirects.DONT_FOLLOW));
153+
assertThat(getJdkHttpClient(templateWithoutRedirects).followRedirects()).isEqualTo(Redirect.NEVER);
154+
}
155+
156+
@Test
157+
void httpComponentsAreBuildConsideringSettingsInRestTemplateBuilder() {
158+
RestTemplateBuilder builder = new RestTemplateBuilder()
159+
.requestFactoryBuilder(ClientHttpRequestFactoryBuilder.httpComponents());
160+
assertThat(getRequestConfig((RestTemplateBuilder) null).isRedirectsEnabled()).isTrue();
161+
assertThat(getRequestConfig(null, HttpClientOption.ENABLE_REDIRECTS).isRedirectsEnabled()).isTrue();
162+
assertThat(getRequestConfig(builder).isRedirectsEnabled()).isTrue();
163+
assertThat(getRequestConfig(builder, HttpClientOption.ENABLE_REDIRECTS).isRedirectsEnabled()).isTrue();
164+
assertThat(getRequestConfig(builder.redirects(Redirects.DONT_FOLLOW)).isRedirectsEnabled()).isFalse();
165+
assertThat(getRequestConfig(builder.redirects(Redirects.DONT_FOLLOW), HttpClientOption.ENABLE_REDIRECTS)
166+
.isRedirectsEnabled()).isTrue();
167+
}
168+
169+
private RequestConfig getRequestConfig(RestTemplateBuilder builder, HttpClientOption... httpClientOptions) {
170+
builder = (builder != null) ? builder : new RestTemplateBuilder();
171+
TestRestTemplate template = new TestRestTemplate(builder, null, null, httpClientOptions);
172+
return getRequestConfig(template);
173+
}
174+
175+
private RequestConfig getRequestConfig(TestRestTemplate template) {
148176
CustomHttpComponentsClientHttpRequestFactory factory = (CustomHttpComponentsClientHttpRequestFactory) template
149177
.getRestTemplate()
150178
.getRequestFactory();
151-
RequestConfig config = factory.createRequestConfig();
152-
assertThat(config.isRedirectsEnabled()).isFalse();
179+
return factory.createRequestConfig();
180+
}
153181

154-
template = new TestRestTemplate().withRedirects(Redirects.FOLLOW);
155-
factory = (CustomHttpComponentsClientHttpRequestFactory) template.getRestTemplate().getRequestFactory();
156-
config = factory.createRequestConfig();
157-
assertThat(config.isRedirectsEnabled()).isTrue();
182+
private HttpClient getJdkHttpClient(TestRestTemplate templateWithRedirects) {
183+
JdkClientHttpRequestFactory requestFactory = (JdkClientHttpRequestFactory) templateWithRedirects
184+
.getRestTemplate()
185+
.getRequestFactory();
186+
return (HttpClient) ReflectionTestUtils.getField(requestFactory, "httpClient");
158187
}
159188

160189
@Test

0 commit comments

Comments
 (0)