问题
当我在spring mvc项目中使用Flux对接口进行返回时,出现中文变成问号的情况,以下是我的代码
@GetMapping(value = "/chat", produces = "text/event-stream; charset=UTF-8")
public Flux<String> chat(@RequestParam String message, @RequestParam(required = false) String tag, HttpServletResponse response) {
Flux<String> content = ragService.chat(message, tag)
.filter(StringUtils::isNotBlank)
.doOnNext(data -> log.info("Sending SSE data: [length={}, content={}]",
Objects.requireNonNull(data).length(), data))
.doOnError(e -> log.error("SSE error: {}", e.getMessage()));
return Flux.from(content);
}
通过调试发现,日志打印出来的数据是正常的中文,但是接口返回的数据却是

这种数据,英文和数字可以正常显示
试过的方案
方案一
在yaml中加入charts编码
server:
servlet:
encoding:
charset: UTF-8
force: true
enabled: true
通过测试后发现无任何效果
方案二
在map中对数据进行编码
Flux<String> content = ragService.chat(message, tag)
.filter(StringUtils::isNotBlank)
.map(data -> URLDecoder.decode(data, StandardCharsets.UTF_8))
.doOnNext(data -> log.info("Sending SSE data: [length={}, content={}]",
Objects.requireNonNull(data).length(), data))
.doOnError(e -> log.error("SSE error: {}", e.getMessage()));
return Flux.from(content);
经过测试发现无效