Browse Source

Imply text/event-stream when serializing ServerSentEvent

Issue: SPR-14748
pull/1186/head
Sebastien Deleuze 9 years ago
parent
commit
44ceecc8b3
  1. 2
      spring-web-reactive/src/main/java/org/springframework/web/reactive/config/WebReactiveConfiguration.java
  2. 18
      spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/SseIntegrationTests.java
  3. 3
      spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java

2
spring-web-reactive/src/main/java/org/springframework/web/reactive/config/WebReactiveConfiguration.java

@ -405,12 +405,12 @@ public class WebReactiveConfiguration implements ApplicationContextAware { @@ -405,12 +405,12 @@ public class WebReactiveConfiguration implements ApplicationContextAware {
if (jaxb2Present) {
writers.add(new EncoderHttpMessageWriter<>(new Jaxb2XmlEncoder()));
}
writers.add(new Jackson2ServerHttpMessageWriter(new ServerSentEventHttpMessageWriter(sseDataEncoders)));
if (jackson2Present) {
Jackson2JsonEncoder jacksonEncoder = new Jackson2JsonEncoder();
writers.add(new Jackson2ServerHttpMessageWriter(new EncoderHttpMessageWriter<>(jacksonEncoder)));
sseDataEncoders.add(jacksonEncoder);
}
writers.add(new Jackson2ServerHttpMessageWriter(new ServerSentEventHttpMessageWriter(sseDataEncoders)));
}
/**
* Override this to modify the list of message writers after it has been

18
spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/SseIntegrationTests.java

@ -120,6 +120,24 @@ public class SseIntegrationTests extends AbstractHttpHandlerIntegrationTests { @@ -120,6 +120,24 @@ public class SseIntegrationTests extends AbstractHttpHandlerIntegrationTests {
);
}
@Test
public void sseAsEventWithoutAcceptHeader() throws Exception {
Flux<String> result = this.webClient
.perform(get("http://localhost:" + port + "/sse/event"))
.extract(bodyStream(String.class))
.filter(s -> !s.equals("\n"))
.map(s -> s.replace("\n", ""))
.take(2);
TestSubscriber
.subscribe(result)
.await(Duration.ofSeconds(5))
.assertValues(
"id:0:bardata:foo",
"id:1:bardata:foo"
);
}
@RestController
@SuppressWarnings("unused")
static class SseController {

3
spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java

@ -63,7 +63,8 @@ public class ServerSentEventHttpMessageWriter implements HttpMessageWriter<Objec @@ -63,7 +63,8 @@ public class ServerSentEventHttpMessageWriter implements HttpMessageWriter<Objec
@Override
public boolean canWrite(ResolvableType elementType, MediaType mediaType) {
return mediaType == null || TEXT_EVENT_STREAM.isCompatibleWith(mediaType);
return mediaType == null || TEXT_EVENT_STREAM.isCompatibleWith(mediaType) ||
ServerSentEvent.class.isAssignableFrom(elementType.getRawClass());
}
@Override

Loading…
Cancel
Save