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"

posted @ 2017-07-17 16:35  shawWey  阅读(1050)  评论(0编辑  收藏  举报