/** * Send the object formatted as a single SSE "data" line. It's equivalent to: * <pre> * // static import of SseEmitter.* * * SseEmitter emitter = new SseEmitter(); * emitter.send(event().data(myObject, MediaType.APPLICATION_JSON)); * </pre> * * <p>Please, see {@link ResponseBodyEmitter#send(Object) parent Javadoc} * for important notes on exception handling. * * @param object the object to write * @param mediaType a MediaType hint for selecting an HttpMessageConverter * @throws IOException raised when an I/O error occurs */ @Override public void send(Object object, @Nullable MediaType mediaType) throws IOException { send(event().data(object, mediaType)); }
/** * Send the object formatted as a single SSE "data" line. It's equivalent to: * <pre> * // static import of SseEmitter.* * * SseEmitter emitter = new SseEmitter(); * emitter.send(event().data(myObject, MediaType.APPLICATION_JSON)); * </pre> * * <p>Please, see {@link ResponseBodyEmitter#send(Object) parent Javadoc} * for important notes on exception handling. * * @param object the object to write * @param mediaType a MediaType hint for selecting an HttpMessageConverter * @throws IOException raised when an I/O error occurs */ @Override public void send(Object object, @Nullable MediaType mediaType) throws IOException { send(event().data(object, mediaType)); }
private SseEmitter.SseEventBuilder adapt(ServerSentEvent<?> sse) { SseEmitter.SseEventBuilder builder = SseEmitter.event(); String id = sse.id(); String event = sse.event(); Duration retry = sse.retry(); String comment = sse.comment(); Object data = sse.data(); if (id != null) { builder.id(id); } if (event != null) { builder.name(event); } if (data != null) { builder.data(data); } if (retry != null) { builder.reconnectTime(retry.toMillis()); } if (comment != null) { builder.comment(comment); } return builder; } }
public void send(Object object, MediaType mediaType) throws IOException { if (object != null) { send(event().data(object, mediaType));
private SseEmitter.SseEventBuilder adapt(ServerSentEvent<?> sse) { SseEmitter.SseEventBuilder builder = SseEmitter.event(); String id = sse.id(); String event = sse.event(); Duration retry = sse.retry(); String comment = sse.comment(); Object data = sse.data(); if (id != null) { builder.id(id); } if (event != null) { builder.name(event); } if (data != null) { builder.data(data); } if (retry != null) { builder.reconnectTime(retry.toMillis()); } if (comment != null) { builder.comment(comment); } return builder; } }
public SseEventBuilder createSseEventBuilder() { SseEventBuilder sseBuilder = SseEmitter.event(); if (!this.event.event().equals(SseEvent.DEFAULT_EVENT)) { sseBuilder.name(this.event.event()); } this.event.id().ifPresent(sseBuilder::id); this.event.retry().map(Duration::toMillis).ifPresent(sseBuilder::reconnectTime); this.event.comment().ifPresent(sseBuilder::comment); if (this.convertedValue != null) { for (String line : this.convertedValue.split("\n")) { sseBuilder.data(line); } } else if (this.event.data() instanceof String) { for (String line : ((String) this.event.data()).split("\n")) { sseBuilder.data(line); } } else { sseBuilder.data(this.event.data()); } return sseBuilder; }
private SseEmitter.SseEventBuilder adapt(ServerSentEvent<?> sse) { SseEmitter.SseEventBuilder builder = SseEmitter.event(); String id = sse.id(); String event = sse.event(); Duration retry = sse.retry(); String comment = sse.comment(); Object data = sse.data(); if (id != null) { builder.id(id); } if (event != null) { builder.name(event); } if (data != null) { builder.data(data); } if (retry != null) { builder.reconnectTime(retry.toMillis()); } if (comment != null) { builder.comment(comment); } return builder; } }
@Test public void sseEmitter() throws Exception { MethodParameter type = on(TestController.class).resolveReturnType(SseEmitter.class); SseEmitter emitter = new SseEmitter(); this.handler.handleReturnValue(emitter, type, this.mavContainer, this.webRequest); assertTrue(this.request.isAsyncStarted()); assertEquals(200, this.response.getStatus()); assertEquals("text/event-stream;charset=UTF-8", this.response.getContentType()); SimpleBean bean1 = new SimpleBean(); bean1.setId(1L); bean1.setName("Joe"); SimpleBean bean2 = new SimpleBean(); bean2.setId(2L); bean2.setName("John"); emitter.send(SseEmitter.event(). comment("a test").name("update").id("1").reconnectTime(5000L).data(bean1).data(bean2)); assertEquals(":a test\n" + "event:update\n" + "id:1\n" + "retry:5000\n" + "data:{\"id\":1,\"name\":\"Joe\"}\n" + "data:{\"id\":2,\"name\":\"John\"}\n" + "\n", this.response.getContentAsString()); }
@Test public void sendEventFullWithTwoDataLinesInTheMiddle() throws Exception { this.emitter.send(event().comment("blah").data("foo").data("bar").name("test").reconnectTime(5000L).id("1")); this.handler.assertSentObjectCount(5); this.handler.assertObject(0, ":blah\ndata:", SseEmitter.TEXT_PLAIN); this.handler.assertObject(1, "foo"); this.handler.assertObject(2, "\ndata:", SseEmitter.TEXT_PLAIN); this.handler.assertObject(3, "bar"); this.handler.assertObject(4, "\nevent:test\nretry:5000\nid:1\n\n", SseEmitter.TEXT_PLAIN); }
@Test public void sendEventFull() throws Exception { this.emitter.send(event().comment("blah").name("test").reconnectTime(5000L).id("1").data("foo")); this.handler.assertSentObjectCount(3); this.handler.assertObject(0, ":blah\nevent:test\nretry:5000\nid:1\ndata:", SseEmitter.TEXT_PLAIN); this.handler.assertObject(1, "foo"); this.handler.assertObject(2, "\n\n", SseEmitter.TEXT_PLAIN); }
@Test public void sendEventWithTwoDataLines() throws Exception { this.emitter.send(event().data("foo").data("bar")); this.handler.assertSentObjectCount(5); this.handler.assertObject(0, "data:", SseEmitter.TEXT_PLAIN); this.handler.assertObject(1, "foo"); this.handler.assertObject(2, "\ndata:", SseEmitter.TEXT_PLAIN); this.handler.assertObject(3, "bar"); this.handler.assertObject(4, "\n\n", SseEmitter.TEXT_PLAIN); }
@Test public void sendEventWithDataLine() throws Exception { this.emitter.send(event().data("foo")); this.handler.assertSentObjectCount(3); this.handler.assertObject(0, "data:", SseEmitter.TEXT_PLAIN); this.handler.assertObject(1, "foo"); this.handler.assertObject(2, "\n\n", SseEmitter.TEXT_PLAIN); }