Spring下@ResponseBody响应中文内容乱码问题

引言: 在JQuery的Ajax请求中,收到的基于后台返回回来的结果出现乱码,在后台其内容正确,到了前台之后,确是乱码??????,该怎样解决呢?

1.  问题的提出

前端基于JQuery的Ajax进行页面请求,可是收到的响应信息中的中文确是乱码;后台使用了基于Spring的@ResponseBody来对响应结果进行了封装。

2. 分析问题

2.1  JQuery前端排除

基于查看,JQuery的前端Ajax请求默认的都是基于UTF-8的请求,指定与否不影响结果信息。

假设坚持要加,在前端javaScript代码中添?:

contentType: "application/x-www-form-urlencoded; charset=utf-8",

2.2 后端Spring配置信息的分析

后端使用了例如以下配置来进行JacksonMapping信息的映射:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" >
    <property name="messageConverters">
        <list>
          <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
        </list>
    </property>
</bean>    

经过网上的查找,发现能够使用org.springframework.http.converter.StringHttpMessageConverter来进行charset的强制转换。

3. 问题的解决

在RequestMappingHandlerAdapter中添?StringHttpMessageConverter来进行信息的编码转换:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" >
        <property name="messageConverters">
        <list>
          <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
          <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>text/plain;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </list>
    </property>
   </bean> 

经过分析,能够看到事实上就是在当中添?了一个基于String信息的MessageConverter,将其转换为UTF-8.

4.  应用配置,问题解决

改动配置信息,重新启动系统,然后就能够在系统中看到正常的页面显示信息了。

总结分析:

spring从3.0開始提供一个HttpMessageConverter<T>接口,这个接口相当实用,spring能够针对Http报文头的ContentType来调用该类的默认实现类将请求和响应进行对应的转换。用户能够基于这个接口实现对Request和Response的精细化控制和管理。

Spring下@ResponseBody响应中文内容乱码问题,布布扣,bubuko.com

时间: 2024-10-13 05:24:38

Spring下@ResponseBody响应中文内容乱码问题的相关文章

Spring MVC @ResponseBody响应中文乱码

问题:在前端通过get请求服务端返回String类型的服务时,会出现中文乱码问题 原因:由于spring默认对String类型的返回的编码采用的是 StringHttpMessageConverter>>> spring mvc的一个bug,spring MVC有一系列HttpMessageConverter去处理用@ResponseBody注解的返回值,如返回list则使用MappingJacksonHttpMessageConverter,返回string,则使用StringHttp

Spring MVC @ResponseBody返回中文字符串乱码问题

朋友做小项目练手的时候遇到的,着实让他郁闷够呛..这个问题的确很恶心.. 项目中引用的json包,直接用@ResponseBody注解返回json字符串..有关这个的乱码问题网上很多,各种花样各种转码器方法,但是试了一遍基本都无效,很多已经过时了..这里说一下spring引的是3.2.8的jar包.这个也没什么好分析的,基本就是在尝试各种解决方案的有效性..最终有2种有效在spring3.0以上版本下.. @RequestMapping(value="/test", produces

解决Spring MVC @ResponseBody返回中文字符串乱码问题

引起乱码原因为spring mvc使用的默认处理字符串编码为ISO-8859-1,具体参考org.springframework.http.converter.StringHttpMessageConverter类中public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1"); 解决方法: 第一种方法: 对于需要返回字符串的方法添加注解,如下: @RequestMapping(value=&quo

Android项目,从web上取下汉字,中文部分乱码

Android项目,从web上取下汉字,中文部分乱码. 常见问题,搜索一下,网上有很多办法解决.如果还没有试过这个办法,可以尝试一下. BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity() .getContent(),"gb2312")); 原文首发自我的主力博客:http://anforen.com/wp/2015/10/android-web-chinese-messy-c

Spring MVC中@ResponseBody 返回中文字符串乱码问题

在MVC配置文件中配置 <mvc:annotation-driven> <!-- 解决@ResponseBody返回中文乱码 --> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name

linux 下vi /vim 中文汉字乱码解决

http://my.oschina.net/laserdance/blog/53474很多win下编译的配置文件(译码格式有utf8/gbk)上传到linux服务器上时打开汉字乱码 解决方法如下: 修改vi环境配置 vi /etc/virc 任意地方增加一行 set fileencodings=utf-8,gbk,ucs-bom,cp936 保存 然后退出连接重新连接即可 更多文章里链接: vi/vim 中文乱码 vim终端下中文乱码问题 CSDN - 解决vi中文乱码问题

Spring MVC+MySQL保存中文变成乱码

环境:MySQL,Spring MVC3.2.0,jQuery v2.0.3,使用JdbcTemplate访问数据库,相当于全套Spring解决方案. 现象 直接使用表单POST,或者使用jQuery POST数据到服务端,在Controller中获得的中文字符串皆为乱码.到达JdbcTemplate插入或者更新数据库时,自然也是乱码. 解决措施 修改web.xml,增加编码过滤器,如下(注意,需要设置forceEncoding参数值为true) <filter> <filter-nam

解决IDEA打印到控制台的中文内容乱码

File-->Settings-->Editor-->File Encodings->将图中内容均设置为UTF-8--->点击+号选中自己的项目->Apply-->OK  即可解决中文乱码问题 原文地址:https://www.cnblogs.com/roseAT/p/10311896.html

Struct2 csv文件上传读取中文内容乱码

网络上搜索下,发现都不适合 最终改写代码: FileInputStream fis = null; InputStreamReader isr = null; BufferedReader br= null; try { fis = new FileInputStream(file); isr = new InputStreamReader(fis,"gbk"); br = new BufferedReader(isr); String line1 = null; while ((li