diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java index 9518978298e0..64a37fc59bf9 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java @@ -220,6 +220,11 @@ private class DefaultRequestBodyUriSpec implements RequestBodyUriSpec { DefaultRequestBodyUriSpec(HttpMethod httpMethod) { this.httpMethod = httpMethod; + + // Add defaultRequest option to WebClient.Builder + if (defaultRequest != null) { + defaultRequest.accept(this); + } } @Override @@ -479,9 +484,6 @@ public Mono exchange() { } private ClientRequest.Builder initRequestBuilder() { - if (defaultRequest != null) { - defaultRequest.accept(this); - } ClientRequest.Builder builder = ClientRequest.create(this.httpMethod, initUri()) .headers(this::initHeaders) .cookies(this::initCookies) diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultWebClientTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultWebClientTests.java index 2434d9a3f8e6..f95c1d6cafec 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultWebClientTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultWebClientTests.java @@ -24,6 +24,7 @@ import java.util.function.Function; import java.util.function.Predicate; +import org.assertj.core.api.InstanceOfAssertFactories; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; @@ -524,6 +525,28 @@ public void onStatusHandlersApplyForToEntityMethods() { testStatusHandlerForToEntity(spec.toEntityFlux(BodyExtractors.toFlux(String.class))); } + @Test + public void onOverrideHeadersUsingBuilder() { + // Given + WebClient client = this.builder.defaultRequest(spec -> spec.accept(MediaType.APPLICATION_JSON)) + .build(); + client.get().uri("/path") + .accept(MediaType.IMAGE_PNG) + .retrieve() + .bodyToMono(Void.class) + .block(Duration.ofSeconds(10)); + + // When + ClientRequest request = verifyAndGetRequest(); + + // Then + assertThat(request) + .extracting(ClientRequest::headers) + .extracting(HttpHeaders::getAccept) + .asInstanceOf(InstanceOfAssertFactories.LIST) + .containsExactly(MediaType.IMAGE_PNG); + } + private void testStatusHandlerForToEntity(Publisher responsePublisher) { StepVerifier.create(responsePublisher).expectError(WebClientResponseException.class).verify(); }