Invoke defaultRequest earlier in RestClient and WebClient
Closes gh-32053
This commit is contained in:
@@ -181,7 +181,11 @@ final class DefaultRestClient implements RestClient {
|
||||
}
|
||||
|
||||
private RequestBodyUriSpec methodInternal(HttpMethod httpMethod) {
|
||||
return new DefaultRequestBodyUriSpec(httpMethod);
|
||||
DefaultRequestBodyUriSpec spec = new DefaultRequestBodyUriSpec(httpMethod);
|
||||
if (this.defaultRequest != null) {
|
||||
this.defaultRequest.accept(spec);
|
||||
}
|
||||
return spec;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -456,9 +460,6 @@ final class DefaultRestClient implements RestClient {
|
||||
Observation observation = null;
|
||||
URI uri = null;
|
||||
try {
|
||||
if (DefaultRestClient.this.defaultRequest != null) {
|
||||
DefaultRestClient.this.defaultRequest.accept(this);
|
||||
}
|
||||
uri = initUri();
|
||||
HttpHeaders headers = initHeaders();
|
||||
ClientHttpRequest clientRequest = createRequest(uri);
|
||||
|
||||
@@ -900,6 +900,29 @@ class RestClientIntegrationTests {
|
||||
expectRequest(request -> assertThat(request.getHeader("foo")).isEqualTo("bar"));
|
||||
}
|
||||
|
||||
@ParameterizedRestClientTest
|
||||
void defaultRequestOverride(ClientHttpRequestFactory requestFactory) {
|
||||
startServer(requestFactory);
|
||||
|
||||
prepareResponse(response -> response.setHeader("Content-Type", "text/plain")
|
||||
.setBody("Hello Spring!"));
|
||||
|
||||
RestClient headersClient = this.restClient.mutate()
|
||||
.defaultRequest(request -> request.accept(MediaType.APPLICATION_JSON))
|
||||
.build();
|
||||
|
||||
String result = headersClient.get()
|
||||
.uri("/greeting")
|
||||
.accept(MediaType.TEXT_PLAIN)
|
||||
.retrieve()
|
||||
.body(String.class);
|
||||
|
||||
assertThat(result).isEqualTo("Hello Spring!");
|
||||
|
||||
expectRequestCount(1);
|
||||
expectRequest(request -> assertThat(request.getHeader("Accept")).isEqualTo(MediaType.TEXT_PLAIN_VALUE));
|
||||
}
|
||||
|
||||
|
||||
private void prepareResponse(Consumer<MockResponse> consumer) {
|
||||
MockResponse response = new MockResponse();
|
||||
|
||||
Reference in New Issue
Block a user