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

本文探讨了在使用JQuery的Ajax请求时,遇到中文乱码问题的解决方案。通过分析前端和后端配置,发现主要是后端配置导致的问题,并通过在RequestMappingHandlerAdapter中加入StringHttpMessageConverter解决了乱码问题。

引言: 在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的精细化控制和管理。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值