Spring Boot
2025-08-12 11:57
阅读:184
评论:0
解决Spring boot SseEmitter 推送数据客户端乱码问题
方式一 创建全局 SSE 专用的转换器 方式二 继承 SseEmitter 重写extendResponse,请求头事件流指定utf-8编码 SseEmitter sseEmitter = new SseEmitter() 改为 SseEmitter sseEmitter = new SseEmit
方式一
- 创建全局 SSE 专用的转换器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Bean public HttpMessageConverters fastJsonHttpMessageConverters() { MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); // .... // 创建 SSE 专用的转换器 StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(StandardCharsets.UTF_8); stringConverter.setSupportedMediaTypes(Arrays.asList( MediaType.TEXT_EVENT_STREAM, MediaType.TEXT_PLAIN )); return new HttpMessageConverters(jackson2HttpMessageConverter, stringConverter); }方式二
- 继承
SseEmitter重写extendResponse,请求头事件流指定utf-8编码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class SseEmitterUTF8 extends SseEmitter { public SseEmitterUTF8() { super(); } public SseEmitterUTF8(Long timeout) { super(timeout); } @Override protected void extendResponse(ServerHttpResponse outputMessage) { super.extendResponse(outputMessage); HttpHeaders headers = outputMessage.getHeaders(); headers.setContentType(new MediaType(MediaType.TEXT_EVENT_STREAM, StandardCharsets.UTF_8)); }}SseEmitter sseEmitter = new SseEmitter()改为SseEmitter sseEmitter = new SseEmitterUTF8()