spring responsebody 返回中文乱码

@RequestMapping(value = "getJSON", method = RequestMethod.GET,produces={"text/html;charset=UTF-8;","application/json;"} )
    @ResponseBody
    public String getJson(HttpServletRequest request,HttpServletResponse response){
         response.setCharacterEncoding("UTF-8");
        
        return "说到底";
        
    }

前台
.ajax({

       type: "GET",
       url: "getJSON.do",
       success: function(data){
           console.log(data);          
       }
   网上说加produces=“ { }”
   加了还是乱码。
阅读 5k
6 个回答

还得看你的web容器是什么编码啊... 踩着踩着也就过去了.

对spring-mvc对编码适配器做编码支持,没记错是标签名为:

<mvc:message-converters>

的货

  1. spring mvc 添加 Jackson 支持

  2. 添加spring mvc 配置

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <constructor-arg name="defaultCharset" value="UTF-8"/>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

或者 重写 StringHttpMessageConverter

/* 将 */ public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
/* 改 */ public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
新手上路,请多包涵

用其他的抓包工具测试你的返回结果是否是utf-8的中文。
问题往往出现在源头或者最后一步。
如果是在页面乱码上你的JSP页面没有设置 charset "UTF-8"。
浏览器console里面乱码的话,用F12 网络 看看响应头Content-Type = text/html,Encoding之类的。
这些环节没有问题,那大概就是String 环境设置的问题,前面回答很值得参考。

工程中用springmvc返回json格式时,中文乱码了,看了一下springmvc源码发现 StringHttpMessageConverter 这个类的默认编码为ISO-8859-1(悲剧,springmvc这么大的东西怎么不用utf-8,搞不懂)

下面是解决方法,

springmvc 的配置文件:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
        <property name="messageConverters">   
            <list>   
                <bean class = "org.springframework.http.converter.StringHttpMessageConverter">   
                    <property name = "supportedMediaTypes">
                        <list>
                            <value>text/html;charset=UTF-8</value>   
                        </list>   
                    </property>   
                </bean>   
            </list>   
        </property>  
    </bean>
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
        <property name="messageConverters"> 
            <list>  
                <bean class="org.springframework.http.converter.StringHttpMessageConverter"> 
                    <property name="supportedMediaTypes"> 
                        <list> 
                            <value>text/html; charset=utf-8</value> 
                        </list> 
                    </property> 
                </bean>
            </list>  
        </property> 
    </bean>
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">   
        <property name="interceptors">  
            <list>     
            </list>  
        </property>  
    </bean>  

使用这个配置要把springmvc这个<mvc:annotation-driven /> 删掉,不要用springmvc默认的初始化配置

加没加CharacterEncodingFilter?没加的话加上试试看
如果不行:
用的哪个版本的spirng,哪个版本的tomcat?
以及:
哪有楼上这些说的这么复杂。。。一片一片的xml看着就烦。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题