controller返回js中文变成?解决方案
在使用spring-mvc的mvc的时候既享受它带来的便捷,又头痛它的一些问题,比如经典的中文乱码问题。现在是用json作为客户端和服务端 的数据交换格式貌似很流行,但是在springmvc中有时候会因为我们的各种疏忽从而造成页面ajax请求到的相应数据,如果带有中文常常是以 “????”显示,让人很恼火。在网上搜索后有很多解决的方案,方案都说中文乱码问题牵扯到springmvc的 StringHttpMessageConverter类,给出的答案都是自己去写个类继承它,然后用一堆眼花缭乱的配置去在beans.xml中去配 置,而且还必须要配置在<mvc:annotation-driven/>标签之前,否则。。。。
我也出现了json中文乱码问题,搜出了一大堆方案后大喜,一个接一个的去测试。结果很失望:居然没一个能够解决我的问题!这不奇怪么,而且那么繁琐的过程让人望而生畏,又去是读源码又是覆盖方法什么,都说原因之所在于:
public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> { public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
解决方案:
@RequestMapping(value="/getViewMsgByKey",produces = "text/html;charset=UTF-8") @ResponseBody public String getViewMsgByKey(HttpServletResponse response,String viewKey){ response.setHeader("Cache-Control", "no-cache"); response.setContentType("text/json;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); String viewMsg=configurationService.getViewMsgByKey(viewKey); return viewMsg; }
加入红色字体部分即可:
在action中取得response,由他写入响应数据
在aciton的需要返回json的方法的@requestmaping中写入 produces = "text/html;charset=UTF-8"