程序员の奇妙冒险

返回
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()
评论 (0)
暂无评论 来抢沙发吧~