diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClientBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClientBuilder.java index fdcac231ea..a1be891bc5 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClientBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClientBuilder.java @@ -256,4 +256,12 @@ class DefaultWebClientBuilder implements WebClient.Builder { return new DefaultWebClientBuilder(this); } + @Override + public WebClient.Builder apply(Consumer builderConsumer) { + Assert.notNull(builderConsumer, "'builderConsumer' must not be null"); + + builderConsumer.accept(this); + return this; + } + } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java index ca21357dae..c7b4943c0a 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/WebClient.java @@ -301,16 +301,22 @@ public interface WebClient { */ Builder exchangeFunction(ExchangeFunction exchangeFunction); - /** - * Builder the {@link WebClient} instance. - */ - WebClient build(); - /** * Clone this {@code WebClient.Builder} */ Builder clone(); + /** + * Shortcut for pre-packaged customizations to WebTest builder. + * @param builderConsumer the consumer to apply + */ + Builder apply(Consumer builderConsumer); + + /** + * Builder the {@link WebClient} instance. + */ + WebClient build(); + } 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 50a7be7264..a008345488 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 @@ -157,6 +157,19 @@ public class DefaultWebClientTests { client.get().uri("/path").attribute("foo", "bar").exchange(); } + @Test + public void apply() { + WebClient client = builder() + .apply(builder -> builder.defaultHeader("Accept", "application/json").defaultCookie("id", "123")) + .build(); + client.get().uri("/path").exchange(); + + ClientRequest request = verifyExchange(); + assertEquals("application/json", request.headers().getFirst("Accept")); + assertEquals("123", request.cookies().getFirst("id")); + verifyNoMoreInteractions(this.exchangeFunction); + } + private WebClient.Builder builder() {