[alibaba/fastjson]FastJsonHttpMessageConverter 的编码问题

2025-11-13 823 views
3

最近使用了新版本的包(1.2.35),替换了原来的 FastJsonHttpMessageConverter4 ,替换后发现 converter.setDefaultCharset(Charset.forName("UTF-8")) 这句代码不起作用了,controller 返回的 json 中文字符串依然是乱码,于是进 FastJsonHttpMessageConverter 看了下,发现了如下代码:

    if(headers.getContentType() == null) {
        if(contentType == null || contentType.isWildcardType() || contentType.isWildcardSubtype()) {
            contentType = this.getDefaultContentType(t);
        }

        if(contentType != null) {
            headers.setContentType(contentType);
        }
    }

这里并没有采用 AbstractHttpMessageConverteraddDefaultHeaders(...) 方法来添加 contentType,而是使用了如上代码,可是这里在给 headers 添加 contentType 时并没有使用 defaultCharset 来指定编码,因此返回的 json 数据会乱码,目前的解决办法就是自定义 mediaType 给 supportedType,希望能够改善下。

回答

9

不指定的话默认会使用FastJsonConfig 里边的charset ,默认是UTF-8。 不太确定你的使用场景, 可以提供一个能跑的单元测试吗

7

FastJsonConfig 里面的 charset 是针对 json 序列化时候使用的,我的意思是通过 response 写到浏览器时的 headers 中的 content-type 的编码

4

升级到最新的 1.2.36 版本尝试一下呢。 估计这个问题已经被解决了。

3

看了下新版的 FastJsonHttpMessageConverter, 发现是解决了这个问题,没有重写 write 方法,而是调用了 AbstractHttpMessageConverter 里的,谢谢啦