方式一
@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()