Close

Spring MVC - SseEmitter Examples

[Last Updated: Nov 9, 2025]

Spring MVC 

SseEmitter is spring support class for Server-Sent Events (SSE).

package com.logicbig.example;

import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import java.time.LocalTime;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@Controller
public class MyWebController {

@GetMapping("/test")
public SseEmitter handleRequest() {

final SseEmitter emitter = new SseEmitter();
ExecutorService service = Executors.newSingleThreadExecutor();
service.execute(() -> {
for (int i = 0; i < 10; i++) {
try {
emitter.send(String.valueOf(i),
MediaType.TEXT_PLAIN);

Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
emitter.completeWithError(e);
return;
}
}
emitter.complete();
});

return emitter;
}
}
Original Post




SseEmitter can be used as the body of ResponseEntity:

package com.logicbig.example;

import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@Controller
public class MyWebController2 {

@GetMapping("/test2")
public ResponseEntity<SseEmitter> handleRequest() {

final SseEmitter emitter = new SseEmitter();
ExecutorService service = Executors.newSingleThreadExecutor();
service.execute(() -> {
for (int i = 0; i < 10; i++) {
try {
emitter.send(String.valueOf(i), MediaType.TEXT_PLAIN);

Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
emitter.completeWithError(e);
return;
}
}
emitter.complete();
});

return new ResponseEntity(emitter, HttpStatus.OK);
}
}
Original Post




See Also

Join