—— 阿尔伯特·爱因斯坦

程序员の奇妙冒险

Spring Boot
2025-08-12 11:57阅读:159评论:0

解决Spring boot SseEmitter 推送数据客户端乱码问题

方式一 创建全局 SSE 专用的转换器 方式二 继承 SseEmitter 重写extendResponse,请求头事件流指定utf-8编码 SseEmitter sseEmitter = new SseEmitter() 改为 SseEmitter sseEmitter = new SseEmit

_PROTECTED0__
  • 创建全局 SSE 专用的转换器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@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);
}
 
_PROTECTED1_PROTECTED2_PROTECTED0__ 重写extendResponse,请求头事件流指定utf-8编码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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));
}
}
 
  • ___PROTECTED_3__0___PROTECTED_4__2___PROTECTED_5__1__
评论(0)
暂无评论来抢沙发吧~