Browse Source

Enable RestClient.defaultRequest

This commit enables the defaultRequest setting in the RestClient
builder.

Closes gh-32028
pull/32057/head
Arjen Poutsma 2 years ago
parent
commit
0ada78ad84
  1. 10
      spring-web/src/main/java/org/springframework/web/client/DefaultRestClient.java
  2. 3
      spring-web/src/main/java/org/springframework/web/client/DefaultRestClientBuilder.java
  3. 44
      spring-web/src/test/java/org/springframework/web/client/RestClientIntegrationTests.java

10
spring-web/src/main/java/org/springframework/web/client/DefaultRestClient.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2023 the original author or authors.
* Copyright 2002-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -99,6 +99,9 @@ final class DefaultRestClient implements RestClient { @@ -99,6 +99,9 @@ final class DefaultRestClient implements RestClient {
@Nullable
private final HttpHeaders defaultHeaders;
@Nullable
private final Consumer<RequestHeadersSpec<?>> defaultRequest;
private final List<StatusHandler> defaultStatusHandlers;
private final DefaultRestClientBuilder builder;
@ -116,6 +119,7 @@ final class DefaultRestClient implements RestClient { @@ -116,6 +119,7 @@ final class DefaultRestClient implements RestClient {
@Nullable List<ClientHttpRequestInitializer> initializers,
UriBuilderFactory uriBuilderFactory,
@Nullable HttpHeaders defaultHeaders,
@Nullable Consumer<RequestHeadersSpec<?>> defaultRequest,
@Nullable List<StatusHandler> statusHandlers,
List<HttpMessageConverter<?>> messageConverters,
ObservationRegistry observationRegistry,
@ -127,6 +131,7 @@ final class DefaultRestClient implements RestClient { @@ -127,6 +131,7 @@ final class DefaultRestClient implements RestClient {
this.interceptors = interceptors;
this.uriBuilderFactory = uriBuilderFactory;
this.defaultHeaders = defaultHeaders;
this.defaultRequest = defaultRequest;
this.defaultStatusHandlers = (statusHandlers != null ? new ArrayList<>(statusHandlers) : new ArrayList<>());
this.messageConverters = messageConverters;
this.observationRegistry = observationRegistry;
@ -451,6 +456,9 @@ final class DefaultRestClient implements RestClient { @@ -451,6 +456,9 @@ 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);

3
spring-web/src/main/java/org/springframework/web/client/DefaultRestClientBuilder.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2023 the original author or authors.
* Copyright 2002-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -371,6 +371,7 @@ final class DefaultRestClientBuilder implements RestClient.Builder { @@ -371,6 +371,7 @@ final class DefaultRestClientBuilder implements RestClient.Builder {
return new DefaultRestClient(requestFactory,
this.interceptors, this.initializers, uriBuilderFactory,
defaultHeaders,
this.defaultRequest,
this.statusHandlers,
messageConverters,
this.observationRegistry,

44
spring-web/src/test/java/org/springframework/web/client/RestClientIntegrationTests.java

@ -856,6 +856,50 @@ class RestClientIntegrationTests { @@ -856,6 +856,50 @@ class RestClientIntegrationTests {
expectRequestCount(2);
}
@ParameterizedRestClientTest
void defaultHeaders(ClientHttpRequestFactory requestFactory) {
startServer(requestFactory);
prepareResponse(response -> response.setHeader("Content-Type", "text/plain")
.setBody("Hello Spring!"));
RestClient headersClient = this.restClient.mutate()
.defaultHeaders(headers -> headers.add("foo", "bar"))
.build();
String result = headersClient.get()
.uri("/greeting")
.retrieve()
.body(String.class);
assertThat(result).isEqualTo("Hello Spring!");
expectRequestCount(1);
expectRequest(request -> assertThat(request.getHeader("foo")).isEqualTo("bar"));
}
@ParameterizedRestClientTest
void defaultRequest(ClientHttpRequestFactory requestFactory) {
startServer(requestFactory);
prepareResponse(response -> response.setHeader("Content-Type", "text/plain")
.setBody("Hello Spring!"));
RestClient headersClient = this.restClient.mutate()
.defaultRequest(request -> request.header("foo", "bar"))
.build();
String result = headersClient.get()
.uri("/greeting")
.retrieve()
.body(String.class);
assertThat(result).isEqualTo("Hello Spring!");
expectRequestCount(1);
expectRequest(request -> assertThat(request.getHeader("foo")).isEqualTo("bar"));
}
private void prepareResponse(Consumer<MockResponse> consumer) {
MockResponse response = new MockResponse();

Loading…
Cancel
Save