From 44ceecc8b39f73c47770ec52960c13b166af2837 Mon Sep 17 00:00:00 2001 From: Sebastien Deleuze Date: Tue, 27 Sep 2016 09:27:23 +0200 Subject: [PATCH] Imply text/event-stream when serializing ServerSentEvent Issue: SPR-14748 --- .../config/WebReactiveConfiguration.java | 2 +- .../method/annotation/SseIntegrationTests.java | 18 ++++++++++++++++++ .../ServerSentEventHttpMessageWriter.java | 3 ++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/spring-web-reactive/src/main/java/org/springframework/web/reactive/config/WebReactiveConfiguration.java b/spring-web-reactive/src/main/java/org/springframework/web/reactive/config/WebReactiveConfiguration.java index 643da2ef10c..4c00d3a9409 100644 --- a/spring-web-reactive/src/main/java/org/springframework/web/reactive/config/WebReactiveConfiguration.java +++ b/spring-web-reactive/src/main/java/org/springframework/web/reactive/config/WebReactiveConfiguration.java @@ -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 diff --git a/spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/SseIntegrationTests.java b/spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/SseIntegrationTests.java index 3e3d5e43235..40f4552ffd4 100644 --- a/spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/SseIntegrationTests.java +++ b/spring-web-reactive/src/test/java/org/springframework/web/reactive/result/method/annotation/SseIntegrationTests.java @@ -120,6 +120,24 @@ public class SseIntegrationTests extends AbstractHttpHandlerIntegrationTests { ); } + @Test + public void sseAsEventWithoutAcceptHeader() throws Exception { + Flux 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 { diff --git a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java index cf944ea6531..d5348a1b663 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java @@ -63,7 +63,8 @@ public class ServerSentEventHttpMessageWriter implements HttpMessageWriter