首先: 确定的是(经过多次测试的结果)只有当返回值是 String时才会出现中文乱码,而当返回值是Map<String, Object>或者是其它类型时,并没有中文乱码的出现.
然后找原因: 原因是这可以说是spring mvc的一个bug,spring MVC有一系列HttpMessageConverter去处理用@ResponseBody注解的返回值,如返回list或其它则使用 MappingJacksonHttpMessageConverter,返回string,则使用 StringHttpMessageConverter,而这个convert使用的是字符集是iso-8859-1,而且是final的。所以在当返回json中有中文时会出现乱码。
public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
解决方法:
在@RequestMapping里的并发配置produces={"text/html;charset=UTF-8;","application/json;"}
@RequestMapping(value = "***",produces={"text/html;charset=UTF-8;","application/json;"})
这样设置,这样普通浏览器的请求就能正常显示中文,而客户端的模拟请求(可以是ajax或http)则手动指定Accept的charset,即可正常接收中文。
原文链接:https://blog.csdn.net/u010979495/article/details/50610856