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

方式一

  • 创建全局 SSE 专用的转换器
  @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编码
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()
posted @ 2025-08-12 11:57  程序员の奇妙冒险  阅读(83)  评论(0)    收藏  举报