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 e0e65d02d7..dfae1a19db 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 @@ -142,7 +142,7 @@ class DefaultWebClient implements WebClient { @Override public Builder mutate() { - return this.builder; + return new DefaultWebClientBuilder(this.builder); } 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 4eef4cb27d..12b77b5113 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 @@ -31,10 +31,8 @@ import reactor.test.StepVerifier; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verifyNoMoreInteractions; -import static org.mockito.Mockito.when; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; /** * Unit tests for {@link DefaultWebClient}. @@ -136,17 +134,30 @@ public class DefaultWebClientTests { builder.defaultHeader("foo", "bar"); builder.defaultCookie("foo", "bar"); WebClient client1 = builder.build(); + builder.filter((request, next) -> next.exchange(request)); builder.defaultHeader("baz", "qux"); builder.defaultCookie("baz", "qux"); WebClient client2 = builder.build(); + WebClient.Builder mutatedBuilder = client1.mutate(); + + mutatedBuilder.filter((request, next) -> next.exchange(request)); + mutatedBuilder.defaultHeader("baz", "qux"); + mutatedBuilder.defaultCookie("baz", "qux"); + WebClient clientFromMutatedBuilder = mutatedBuilder.build(); + client1.mutate().filters(filters -> assertEquals(1, filters.size())); client1.mutate().defaultHeaders(headers -> assertEquals(1, headers.size())); client1.mutate().defaultCookies(cookies -> assertEquals(1, cookies.size())); + client2.mutate().filters(filters -> assertEquals(2, filters.size())); client2.mutate().defaultHeaders(headers -> assertEquals(2, headers.size())); client2.mutate().defaultCookies(cookies -> assertEquals(2, cookies.size())); + + clientFromMutatedBuilder.mutate().filters(filters -> assertEquals(2, filters.size())); + clientFromMutatedBuilder.mutate().defaultHeaders(headers -> assertEquals(2, headers.size())); + clientFromMutatedBuilder.mutate().defaultCookies(cookies -> assertEquals(2, cookies.size())); } @Test