Polishing
- Changed Response.sse methods to allow for specific Publisher types to be returned in Response.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user