Skip to content

Commit 2530efd

Browse files
committed
SseEmitter support for multiline String
Closes gh-30965
1 parent 9350091 commit 2530efd

File tree

2 files changed

+13
-0
lines changed
  • spring-webmvc/src

2 files changed

+13
-0
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,9 @@ public SseEventBuilder data(Object object) {
237237
public SseEventBuilder data(Object object, @Nullable MediaType mediaType) {
238238
append("data:");
239239
saveAppendedText();
240+
if (object instanceof String text) {
241+
object = StringUtils.replace(text, "\n", "\ndata:");
242+
}
240243
this.dataToSend.add(new DataWithMediaType(object, mediaType));
241244
append('\n');
242245
return this;

spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitterTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,16 @@ public void sendEventWithTwoDataLines() throws Exception {
104104
this.handler.assertWriteCount(1);
105105
}
106106

107+
@Test
108+
public void sendEventWithMultiline() throws Exception {
109+
this.emitter.send(event().data("foo\nbar\nbaz"));
110+
this.handler.assertSentObjectCount(3);
111+
this.handler.assertObject(0, "data:", TEXT_PLAIN_UTF8);
112+
this.handler.assertObject(1, "foo\ndata:bar\ndata:baz");
113+
this.handler.assertObject(2, "\n\n", TEXT_PLAIN_UTF8);
114+
this.handler.assertWriteCount(1);
115+
}
116+
107117
@Test
108118
public void sendEventFull() throws Exception {
109119
this.emitter.send(event().comment("blah").name("test").reconnectTime(5000L).id("1").data("foo"));

0 commit comments

Comments
 (0)