From f4ae831f7fc3bb3d18564571772463ab4e16b381 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Fri, 9 Sep 2016 10:53:15 +0200 Subject: [PATCH] Polishing - Changed Response.sse methods to allow for specific Publisher types to be returned in Response. --- .../function/DefaultResponseBuilder.java | 5 ++--- .../web/reactive/function/Response.java | 5 +++-- .../function/ServerSentEventResponse.java | 17 ++++++++--------- .../function/ServerSentEventResponseTests.java | 2 +- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/function/DefaultResponseBuilder.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/function/DefaultResponseBuilder.java index 5f5b7d079e..bd1c2ce251 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/function/DefaultResponseBuilder.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/function/DefaultResponseBuilder.java @@ -150,15 +150,14 @@ class DefaultResponseBuilder implements Response.BodyBuilder { } @Override - public Response>> sse( - Publisher> eventsPublisher) { + public >> Response sse(S eventsPublisher) { Assert.notNull(eventsPublisher, "'eventsPublisher' must not be null"); return ServerSentEventResponse .fromSseEvents(this.statusCode, this.headers, eventsPublisher); } @Override - public Response> sse(Publisher eventsPublisher, Class eventClass) { + public > Response sse(S eventsPublisher, Class eventClass) { Assert.notNull(eventsPublisher, "'eventsPublisher' must not be null"); Assert.notNull(eventClass, "'eventClass' must not be null"); return ServerSentEventResponse diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/function/Response.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/function/Response.java index 83381b7242..f1bebbc14f 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/function/Response.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/function/Response.java @@ -327,7 +327,7 @@ public interface Response { * @return the built response * @see Server-Sent Events W3C recommendation */ - Response>> sse(Publisher> eventsPublisher); + >> Response sse(S eventsPublisher); /** * Set the body of the response to the given Server-Sent Event {@link Publisher} and return it. @@ -337,7 +337,8 @@ public interface Response { * @return the built response * @see Server-Sent Events W3C recommendation */ - Response> sse(Publisher eventsPublisher, Class eventClass); + > Response sse(S eventsPublisher, Class eventClass); + } } diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/function/ServerSentEventResponse.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/function/ServerSentEventResponse.java index 2b1a6d6fee..7a6bc1b036 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/function/ServerSentEventResponse.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/function/ServerSentEventResponse.java @@ -32,7 +32,7 @@ import org.springframework.web.server.ServerWebExchange; /** * @author Arjen Poutsma */ -class ServerSentEventResponse extends AbstractResponse> { +class ServerSentEventResponse> extends AbstractResponse { private static final boolean jackson2Present = ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper", @@ -44,12 +44,12 @@ class ServerSentEventResponse extends AbstractResponse> { private final ServerSentEventHttpMessageWriter messageWriter; - private final Publisher eventsPublisher; + private final T eventsPublisher; private final ResolvableType eventType; - private ServerSentEventResponse(int statusCode, HttpHeaders headers, Publisher eventsPublisher, ResolvableType eventType) { + private ServerSentEventResponse(int statusCode, HttpHeaders headers, T eventsPublisher, ResolvableType eventType) { super(statusCode, headers); this.eventsPublisher = eventsPublisher; this.eventType = eventType; @@ -58,17 +58,16 @@ class ServerSentEventResponse extends AbstractResponse> { new ServerSentEventHttpMessageWriter(); } - public static ServerSentEventResponse fromPublisher(int statusCode, HttpHeaders headers, Publisher eventsPublisher, Class eventType) { - return new ServerSentEventResponse<>(statusCode, headers, eventsPublisher, ResolvableType.forClass(eventType)); + public static > ServerSentEventResponse fromPublisher(int statusCode, HttpHeaders headers, S eventsPublisher, Class eventType) { + return new ServerSentEventResponse(statusCode, headers, eventsPublisher, ResolvableType.forClass(eventType)); } - public static ServerSentEventResponse> fromSseEvents(int statusCode, HttpHeaders headers, Publisher> eventsPublisher) { - return new ServerSentEventResponse<>(statusCode, headers, eventsPublisher, - SERVER_SIDE_EVENT_TYPE); + public static >> ServerSentEventResponse fromSseEvents(int statusCode, HttpHeaders headers, S eventsPublisher) { + return new ServerSentEventResponse(statusCode, headers, eventsPublisher, SERVER_SIDE_EVENT_TYPE); } @Override - public Publisher body() { + public T body() { return this.eventsPublisher; } diff --git a/spring-web-reactive/src/test/java/org/springframework/web/reactive/function/ServerSentEventResponseTests.java b/spring-web-reactive/src/test/java/org/springframework/web/reactive/function/ServerSentEventResponseTests.java index c2f5cf328d..9b621bde4a 100644 --- a/spring-web-reactive/src/test/java/org/springframework/web/reactive/function/ServerSentEventResponseTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/web/reactive/function/ServerSentEventResponseTests.java @@ -43,7 +43,7 @@ public class ServerSentEventResponseTests { private final Publisher> body = Mono.just(sse); - private final ServerSentEventResponse> sseResponse = + private final ServerSentEventResponse>> sseResponse = ServerSentEventResponse.fromSseEvents(200, new HttpHeaders(), body); @Test