Browse Source

Copy cookies to ServerResponse builders

See gh-22351
pull/22689/head
Arjen Poutsma 7 years ago
parent
commit
4ca27db0cc
  1. 4
      spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java
  2. 4
      spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultRenderingResponseBuilder.java
  3. 12
      spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java
  4. 11
      spring-webmvc/src/main/java/org/springframework/web/servlet/function/EntityResponse.java
  5. 11
      spring-webmvc/src/main/java/org/springframework/web/servlet/function/RenderingResponse.java
  6. 4
      spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilderTests.java
  7. 4
      spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultRenderingResponseTests.java

4
spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilder.java

@ -126,8 +126,8 @@ final class DefaultEntityResponseBuilder<T> implements EntityResponse.Builder<T>
} }
@Override @Override
public EntityResponse.Builder<T> headers(HttpHeaders headers) { public EntityResponse.Builder<T> headers(Consumer<HttpHeaders> headersConsumer) {
this.headers.putAll(headers); headersConsumer.accept(this.headers);
return this; return this;
} }

4
spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultRenderingResponseBuilder.java

@ -138,8 +138,8 @@ final class DefaultRenderingResponseBuilder implements RenderingResponse.Builder
} }
@Override @Override
public RenderingResponse.Builder headers(HttpHeaders headers) { public RenderingResponse.Builder headers(Consumer<HttpHeaders> headersConsumer) {
this.headers.putAll(headers); headersConsumer.accept(this.headers);
return this; return this;
} }

12
spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerResponseBuilder.java

@ -189,24 +189,27 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder {
@Override @Override
public ServerResponse body(Object body) { public ServerResponse body(Object body) {
return DefaultEntityResponseBuilder.fromObject(body) return DefaultEntityResponseBuilder.fromObject(body)
.headers(this.headers)
.status(this.statusCode) .status(this.statusCode)
.headers(headers -> headers.putAll(this.headers))
.cookies(cookies -> cookies.addAll(this.cookies))
.build(); .build();
} }
@Override @Override
public <T> ServerResponse body(T body, ParameterizedTypeReference<T> bodyType) { public <T> ServerResponse body(T body, ParameterizedTypeReference<T> bodyType) {
return DefaultEntityResponseBuilder.fromObject(body, bodyType) return DefaultEntityResponseBuilder.fromObject(body, bodyType)
.headers(this.headers)
.status(this.statusCode) .status(this.statusCode)
.headers(headers -> headers.putAll(this.headers))
.cookies(cookies -> cookies.addAll(this.cookies))
.build(); .build();
} }
@Override @Override
public ServerResponse render(String name, Object... modelAttributes) { public ServerResponse render(String name, Object... modelAttributes) {
return new DefaultRenderingResponseBuilder(name) return new DefaultRenderingResponseBuilder(name)
.headers(this.headers)
.status(this.statusCode) .status(this.statusCode)
.headers(headers -> headers.putAll(this.headers))
.cookies(cookies -> cookies.addAll(this.cookies))
.modelAttributes(modelAttributes) .modelAttributes(modelAttributes)
.build(); .build();
} }
@ -214,8 +217,9 @@ class DefaultServerResponseBuilder implements ServerResponse.BodyBuilder {
@Override @Override
public ServerResponse render(String name, Map<String, ?> model) { public ServerResponse render(String name, Map<String, ?> model) {
return new DefaultRenderingResponseBuilder(name) return new DefaultRenderingResponseBuilder(name)
.headers(this.headers)
.status(this.statusCode) .status(this.statusCode)
.headers(headers -> headers.putAll(this.headers))
.cookies(cookies -> cookies.addAll(this.cookies))
.modelAttributes(model) .modelAttributes(model)
.build(); .build();
} }

11
spring-webmvc/src/main/java/org/springframework/web/servlet/function/EntityResponse.java

@ -86,12 +86,15 @@ public interface EntityResponse<T> extends ServerResponse {
Builder<T> header(String headerName, String... headerValues); Builder<T> header(String headerName, String... headerValues);
/** /**
* Copy the given headers into the entity's headers map. * Manipulate this response's headers with the given consumer. The
* @param headers the existing HttpHeaders to copy from * 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 * @return this builder
* @see HttpHeaders#add(String, String)
*/ */
Builder<T> headers(HttpHeaders headers); Builder<T> headers(Consumer<HttpHeaders> headersConsumer);
/** /**
* Set the HTTP status. * Set the HTTP status.

11
spring-webmvc/src/main/java/org/springframework/web/servlet/function/RenderingResponse.java

@ -119,12 +119,15 @@ public interface RenderingResponse extends ServerResponse {
Builder header(String headerName, String... headerValues); Builder header(String headerName, String... headerValues);
/** /**
* Copy the given headers into the entity's headers map. * Manipulate this response's headers with the given consumer. The
* @param headers the existing HttpHeaders to copy from * 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 * @return this builder
* @see HttpHeaders#add(String, String)
*/ */
Builder headers(HttpHeaders headers); Builder headers(Consumer<HttpHeaders> headersConsumer);
/** /**
* Set the HTTP status. * Set the HTTP status.

4
spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultEntityResponseBuilderTests.java

@ -154,7 +154,9 @@ public class DefaultEntityResponseBuilderTests {
String body = "foo"; String body = "foo";
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("foo", "bar"); headers.set("foo", "bar");
EntityResponse<String> result = EntityResponse.fromObject(body).headers(headers).build(); EntityResponse<String> result = EntityResponse.fromObject(body)
.headers(h -> h.addAll(headers))
.build();
assertEquals(headers, result.headers()); assertEquals(headers, result.headers());
} }

4
spring-webmvc/src/test/java/org/springframework/web/servlet/function/DefaultRenderingResponseTests.java

@ -78,7 +78,9 @@ public class DefaultRenderingResponseTests {
public void headers() throws Exception { public void headers() throws Exception {
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.set("foo", "bar"); headers.set("foo", "bar");
RenderingResponse result = RenderingResponse.create("foo").headers(headers).build(); RenderingResponse result = RenderingResponse.create("foo")
.headers(h -> h.addAll(headers))
.build();
MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse(); MockHttpServletResponse response = new MockHttpServletResponse();

Loading…
Cancel
Save