From 424bc75fb11bb8e3198239aa9444b77d940e51c4 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Mon, 12 Jun 2017 14:14:40 +0200 Subject: [PATCH] Remove headers(HttpHeaders) This commit removes the headers(HttpHeaders) method on ClientRequest and ServerResponse, in favor of headers(Consumer), which is more flexible. --- .../function/client/ClientRequest.java | 18 ++------------ .../client/DefaultClientRequestBuilder.java | 24 ------------------- .../function/client/DefaultWebClient.java | 5 ++-- .../server/DefaultServerResponseBuilder.java | 6 +++-- .../function/server/ServerResponse.java | 14 +++++++---- .../DefaultServerResponseBuilderTests.java | 8 ++++--- 6 files changed, 23 insertions(+), 52 deletions(-) diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ClientRequest.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ClientRequest.java index 5e21c78b78..8b9334f425 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ClientRequest.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/ClientRequest.java @@ -88,8 +88,8 @@ public interface ClientRequest { static Builder from(ClientRequest other) { Assert.notNull(other, "'other' must not be null"); return new DefaultClientRequestBuilder(other.method(), other.url()) - .headers(other.headers()) - .cookies(other.cookies()) + .headers(headers -> headers.addAll(other.headers())) + .cookies(cookies -> cookies.addAll(other.cookies())) .body(other.body()); } @@ -118,13 +118,6 @@ public interface ClientRequest { */ Builder header(String headerName, String... headerValues); - /** - * Add the given headers into this request's headers map. - * @param headers the existing HttpHeaders to add from - * @return this builder - */ - Builder headers(HttpHeaders headers); - /** * Manipulate this request's headers with the given consumer. The * headers provided to the consumer are "live", so that the consumer can be used to @@ -144,13 +137,6 @@ public interface ClientRequest { */ Builder cookie(String name, String... values); - /** - * Add the given cookies into this request's cookies map. - * @param cookies the existing cookies to copy from - * @return this builder - */ - Builder cookies(MultiValueMap cookies); - /** * Manipulate this request's cookies with the given consumer. The * map provided to the consumer is "live", so that the consumer can be used to diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientRequestBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientRequestBuilder.java index 9c0fd60629..4afeb41f27 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientRequestBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultClientRequestBuilder.java @@ -72,18 +72,6 @@ class DefaultClientRequestBuilder implements ClientRequest.Builder { return this; } - @Override - public ClientRequest.Builder headers(HttpHeaders headers) { - Assert.notNull(headers, "'headers' must not be null"); - for (Map.Entry> entry : headers.entrySet()) { - String headerName = entry.getKey(); - for (String headerValue : entry.getValue()) { - this.headers.add(headerName, headerValue); - } - } - return this; - } - @Override public ClientRequest.Builder headers(Consumer headersConsumer) { Assert.notNull(headersConsumer, "'headersConsumer' must not be null"); @@ -99,18 +87,6 @@ class DefaultClientRequestBuilder implements ClientRequest.Builder { return this; } - @Override - public ClientRequest.Builder cookies(MultiValueMap cookies) { - Assert.notNull(cookies, "'cookies' must not be null"); - for (Map.Entry> entry : cookies.entrySet()) { - String cookieName = entry.getKey(); - for (String cookieValue : entry.getValue()) { - this.cookies.add(cookieName, cookieValue); - } - } - return this; - } - @Override public ClientRequest.Builder cookies(Consumer> cookiesConsumer) { Assert.notNull(cookiesConsumer, "'cookiesConsumer' must not be null"); 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 e1495e9987..d577c930f2 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 @@ -22,7 +22,6 @@ import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.function.Function; @@ -292,7 +291,9 @@ class DefaultWebClient implements WebClient { } private ClientRequest.Builder initRequestBuilder() { - return ClientRequest.method(this.httpMethod, this.uri).headers(initHeaders()).cookies(initCookies()); + return ClientRequest.method(this.httpMethod, this.uri) + .headers(headers -> headers.addAll(initHeaders())) + .cookies(cookies -> cookies.addAll(initCookies())); } private HttpHeaders initHeaders() { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java index 74b1f8a375..294b5c5918 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilder.java @@ -28,6 +28,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.function.BiFunction; +import java.util.function.Consumer; import org.reactivestreams.Publisher; import reactor.core.publisher.Mono; @@ -74,8 +75,9 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder { } @Override - public ServerResponse.BodyBuilder headers(HttpHeaders headers) { - this.headers.putAll(headers); + public ServerResponse.BodyBuilder headers(Consumer headersConsumer) { + Assert.notNull(headersConsumer, "'headersConsumer' must not be null"); + headersConsumer.accept(this.headers); return this; } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerResponse.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerResponse.java index 29773850ba..d4152faf72 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerResponse.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/ServerResponse.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.BiFunction; +import java.util.function.Consumer; import org.reactivestreams.Publisher; import reactor.core.publisher.Mono; @@ -83,7 +84,7 @@ public interface ServerResponse { static BodyBuilder from(ServerResponse other) { Assert.notNull(other, "Other ServerResponse must not be null"); DefaultServerResponseBuilder builder = new DefaultServerResponseBuilder(other.statusCode()); - return builder.headers(other.headers()); + return builder.headers(headers -> headers.addAll(other.headers())); } /** @@ -207,12 +208,15 @@ public interface ServerResponse { B header(String headerName, String... headerValues); /** - * Copy the given headers into the entity's headers map. - * @param headers the existing HttpHeaders to copy from + * Manipulate this response's headers with the given consumer. The + * headers provided to the consumer are "live", so that the consumer can be used to + * {@linkplain HttpHeaders#set(String, String) overwrite} existing header values, + * {@linkplain HttpHeaders#remove(Object) remove} values, or use any of the other + * {@link HttpHeaders} methods. + * @param headersConsumer a function that consumes the {@code HttpHeaders} * @return this builder - * @see HttpHeaders#add(String, String) */ - B headers(HttpHeaders headers); + B headers(Consumer headersConsumer); /** * Set the set of allowed {@link HttpMethod HTTP methods}, as specified diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilderTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilderTests.java index d3d46df0e3..9cd606e8fa 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilderTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/DefaultServerResponseBuilderTests.java @@ -253,10 +253,12 @@ public class DefaultServerResponseBuilderTests { @Test public void headers() throws Exception { - HttpHeaders headers = new HttpHeaders(); - Mono result = ServerResponse.ok().headers(headers).build(); + HttpHeaders newHeaders = new HttpHeaders(); + newHeaders.set("foo", "bar"); + Mono result = + ServerResponse.ok().headers(headers -> headers.addAll(newHeaders)).build(); StepVerifier.create(result) - .expectNextMatches(response -> headers.equals(response.headers())) + .expectNextMatches(response -> newHeaders.equals(response.headers())) .expectComplete() .verify();