Imply text/event-stream when serializing ServerSentEvent

Issue: SPR-14748
This commit is contained in:
Sebastien Deleuze
2016-09-27 09:27:23 +02:00
parent fb7ae010c8
commit 44ceecc8b3
3 changed files with 21 additions and 2 deletions

View File

@@ -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

View File

@@ -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 {

View File

@@ -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