Polishing

- Changed Response.sse methods to allow for specific Publisher types to
 be returned in Response.
This commit is contained in:
Arjen Poutsma
2016-09-09 10:53:15 +02:00
parent d51005fbbe
commit f4ae831f7f
4 changed files with 14 additions and 15 deletions

View File

@@ -150,15 +150,14 @@ class DefaultResponseBuilder implements Response.BodyBuilder {
}
@Override
public <T> Response<Publisher<ServerSentEvent<T>>> sse(
Publisher<ServerSentEvent<T>> eventsPublisher) {
public <T, S extends Publisher<ServerSentEvent<T>>> Response<S> sse(S eventsPublisher) {
Assert.notNull(eventsPublisher, "'eventsPublisher' must not be null");
return ServerSentEventResponse
.fromSseEvents(this.statusCode, this.headers, eventsPublisher);
}
@Override
public <T> Response<Publisher<T>> sse(Publisher<T> eventsPublisher, Class<T> eventClass) {
public <T, S extends Publisher<T>> Response<S> sse(S eventsPublisher, Class<T> eventClass) {
Assert.notNull(eventsPublisher, "'eventsPublisher' must not be null");
Assert.notNull(eventClass, "'eventClass' must not be null");
return ServerSentEventResponse

View File

@@ -327,7 +327,7 @@ public interface Response<T> {
* @return the built response
* @see <a href="https://www.w3.org/TR/eventsource/">Server-Sent Events W3C recommendation</a>
*/
<T> Response<Publisher<ServerSentEvent<T>>> sse(Publisher<ServerSentEvent<T>> eventsPublisher);
<T, S extends Publisher<ServerSentEvent<T>>> Response<S> 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<T> {
* @return the built response
* @see <a href="https://www.w3.org/TR/eventsource/">Server-Sent Events W3C recommendation</a>
*/
<T> Response<Publisher<T>> sse(Publisher<T> eventsPublisher, Class<T> eventClass);
<T, S extends Publisher<T>> Response<S> sse(S eventsPublisher, Class<T> eventClass);
}
}

View File

@@ -32,7 +32,7 @@ import org.springframework.web.server.ServerWebExchange;
/**
* @author Arjen Poutsma
*/
class ServerSentEventResponse<T> extends AbstractResponse<Publisher<T>> {
class ServerSentEventResponse<T extends Publisher<?>> extends AbstractResponse<T> {
private static final boolean jackson2Present =
ClassUtils.isPresent("com.fasterxml.jackson.databind.ObjectMapper",
@@ -44,12 +44,12 @@ class ServerSentEventResponse<T> extends AbstractResponse<Publisher<T>> {
private final ServerSentEventHttpMessageWriter messageWriter;
private final Publisher<T> eventsPublisher;
private final T eventsPublisher;
private final ResolvableType eventType;
private ServerSentEventResponse(int statusCode, HttpHeaders headers, Publisher<T> 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<T> extends AbstractResponse<Publisher<T>> {
new ServerSentEventHttpMessageWriter();
}
public static <S> ServerSentEventResponse<S> fromPublisher(int statusCode, HttpHeaders headers, Publisher<S> eventsPublisher, Class<? extends S> eventType) {
return new ServerSentEventResponse<>(statusCode, headers, eventsPublisher, ResolvableType.forClass(eventType));
public static <T, S extends Publisher<T>> ServerSentEventResponse<S> fromPublisher(int statusCode, HttpHeaders headers, S eventsPublisher, Class<? extends T> eventType) {
return new ServerSentEventResponse<S>(statusCode, headers, eventsPublisher, ResolvableType.forClass(eventType));
}
public static <S> ServerSentEventResponse<ServerSentEvent<S>> fromSseEvents(int statusCode, HttpHeaders headers, Publisher<ServerSentEvent<S>> eventsPublisher) {
return new ServerSentEventResponse<>(statusCode, headers, eventsPublisher,
SERVER_SIDE_EVENT_TYPE);
public static <T, S extends Publisher<ServerSentEvent<T>>> ServerSentEventResponse<S> fromSseEvents(int statusCode, HttpHeaders headers, S eventsPublisher) {
return new ServerSentEventResponse<S>(statusCode, headers, eventsPublisher, SERVER_SIDE_EVENT_TYPE);
}
@Override
public Publisher<T> body() {
public T body() {
return this.eventsPublisher;
}

View File

@@ -43,7 +43,7 @@ public class ServerSentEventResponseTests {
private final Publisher<ServerSentEvent<String>> body = Mono.just(sse);
private final ServerSentEventResponse<ServerSentEvent<String>> sseResponse =
private final ServerSentEventResponse<Publisher<ServerSentEvent<String>>> sseResponse =
ServerSentEventResponse.fromSseEvents(200, new HttpHeaders(), body);
@Test