关于SpringMVC返回中文乱码

来源:互联网 发布:java 生成zip加密 编辑:程序博客网 时间:2024/06/02 06:06

问题复现

 @RequestMapping(value = "/preview", method = RequestMethod.GET)    public String getPreview(@RequestParam(value = "id") Integer id) {        String result;        String url = Global.getConfig("xxx");        url+="?id="+id;        result = WebUtils.doHttpGet(url);        return result;    }

这是一个普通的rest接口,根据参数id获取查询信息,并且调用外部系统,返回结果出现中文乱码????。

问题原因

只有当返回值是String时才会出现中文乱码,而当返回值是Map<String, Object>或者是其它类型时,并没有中文乱码的出现。
这可以说是spring mvc的一个bug,spring MVC有一系列HttpMessageConverter去处理返回值,如返回list或其它则使用MappingJacksonHttpMessageConverter,返回string,则使用StringHttpMessageConverter,而这个convert使用的是字符集是iso-8859-1,而且是final的。

问题解决

@RequestMapping(value = "***",produces={"text/html;charset=UTF-8;","application/json;"}) 

这样普通浏览器的请求就能正常显示中文,而客户端的模拟请求(可以是ajax或http)则手动指定Accept的charset,即可正常接收中文。

0 0
原创粉丝点击