关于使用RestTemplate响应体response出现中文乱

2022-04-06  本文已影响0人  余于鱼不是鱼鱼鱼

在使用RestTemplate做Http交互的时候,响应体的中文解析出来之后就乱码了,全是?????

RestTemplate配置

RestTemplate build = new RestTemplateBuilder().build();

使用RestTemplate请求之后得到的响应结果是这样的

{
    "code": 500,
    "success": false,
    "data": null,
    "msg": "??????"
}

这个问题我首先想到的是RestTemplate的MessageConverter消息转换器,首先找到RestTemplate解析response的地方
方法路径:org.springframework.web.client.HttpMessageConverterExtractor#extractData

如下图


MediaType contentType = getContentType(responseWrapper);这里获取到了response的媒体类型,然后根据这个媒体类型的编码格式去做的read

而我的请求响应的媒体类型是



注意这里的字符集编码是charset=ISO-8859-1

这里为什么会拿到charset=ISO-8859-1呢?让我们来看看,RestTemplate中StringHttpMessageConverter默认的字符集是啥

好了,屁话不多说。改一下

for (int i = 0; i < build.getMessageConverters().size(); i++) {
    if (build.getMessageConverters().get(i) instanceof StringHttpMessageConverter) {
        build.getMessageConverters().set(i, new StringHttpMessageConverter(StandardCharsets.UTF_8));
    }
    if(build.getMessageConverters().get(i) instanceof MappingJackson2HttpMessageConverter){
        ((MappingJackson2HttpMessageConverter) build.getMessageConverters().get(i))
            .setSupportedMediaTypes(ListUtil.of(MediaType.ALL));
    }
}

最终bean如下


重启并测试响应体

{
    "code": 500,
    "success": false,
    "data": null,
    "msg": "不合法的文件大小"
}
上一篇 下一篇

猜你喜欢

热点阅读