SpringMvc返回@ResponseBody中文乱码

使用SpringMvc的@ResponseBody返回指定数据的类型做为http体向外输出,在浏览器里返回的内容里有中文,会出现乱码,项目的编码、tomcat编码等都已设置成utf-8,如下返回的是一个字符串中文乱码。
Java代码   收藏代码
  1. @RequestMapping("user/get_comment_list.do")  
  2.     public @ResponseBody String getUserCommentList(Integer user_id,Byte type){  
  3.         HashMap<String, Object> map = new HashMap<String, Object>();  
  4.         map.put("type", type);  
  5.         map.put("user_id", user_id);  
  6.         CommentActPojo actPojo = new CommentActPojo();  
  7.         List<CommentInfo> list = this.bo.getComList(map);  
  8.         actPojo.setComments(list);  
  9.         //System.out.println("数据:"+JsonUtil.toJson(actPojo));//打印数据无中文乱码  
  10.         return JsonUtil.toJson(actPojo);  
  11.     }  


SpringMvc使用的版本是3.2.2,后来网上找了一些资料,在@RequestMapping里强制指定返回的数据类型和字符编码,中文乱码解决,如下: 
Java代码   收藏代码
  1. @RequestMapping(value="user/get_comment_list.do",produces = "application/json; charset=utf-8")  


问题来了,如果项目里有很多类似这样的请求,每个请求都去配置produces,会很累赘且繁琐,查看了一下源代码,发现在spring处理ResponseBody时涉及到org.springframework.http.converter.StringHttpMessageConverter这个类,该类在默认实现中将defaultCharset设为ISO-8859-1。当@RequestMapping标记的方法未配置produces属性时,将自动使用默认编码;如果配置了produces属性,AbstractHttpMessageConverter中的write方法将不会受supportedMediaTypes影响,而用produce设置的header赋值给contenttype。改造一下RequestMappingHandlerAdapter的配置,springMvc.xml如下:
Java代码  下载地址    收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  6.                         http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
  7.                         http://www.springframework.org/schema/context   
  8.                         http://www.springframework.org/schema/context/spring-context-3.2.xsd  
  9.                         http://www.springframework.org/schema/mvc  
  10.                         http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">  
  11.       
  12.     <!-- 必须放在<mvc:annotation-driven>之前 -->    
  13.     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">    
  14.         <property name="messageConverters">    
  15.             <list>    
  16.                 <bean class="org.springframework.http.converter.StringHttpMessageConverter">    
  17.                     <property name="supportedMediaTypes">    
  18.                         <list>    
  19.                             <value>text/plain;charset=UTF-8</value>  
  20.                             <value>text/html;charset=UTF-8</value>  
  21.                             <value>applicaiton/javascript;charset=UTF-8</value>    
  22.                         </list>    
  23.                     </property>    
  24.                 </bean>    
  25.             </list>    
  26.         </property>    
  27.     </bean>  
  28.       
  29.     <!-- 扫描工程文件 -->  
  30.     <context:component-scan base-package="com.tcl.club.core" />  
  31.     <context:component-scan base-package="com.cus.back" >  
  32.         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />  
  33.     </context:component-scan>  
  34.       
  35.     <mvc:annotation-driven />  
  36.   
  37.     <bean id="multipartResolver"  
  38.         class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />  
  39.       
  40.       
  41.     <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀,在requestmapping输入的地址后自动调用该类进行视图解析 -->  
  42.     <bean id="viewResolver"  
  43.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  44.         <property name="viewClass"  
  45.             value="org.springframework.web.servlet.view.JstlView" />  
  46.         <property name="prefix" value="/WEB-INF/view/" />  
  47.         <property name="suffix" value=".jsp" />  
  48.     </bean>  
  49.       
  50. </beans>   


上述springMvc.xml文件重新设置了StringHttpMessageConverter的编码方式,而不必在每个@RequestMapping里设置produces属性。如果返回的Jackson类型的数据,可以设置成如下:
Java代码    下载地址    收藏代码
  1. <bean    
  2.        class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">    
  3.        <property name="supportedMediaTypes">    
  4.            <list>    
  5.                <value>application/json; charset=UTF-8</value>    
  6.                <value>application/x-www-form-urlencoded; charset=UTF-8</value>    
  7.            </list>    
  8.        </property>    
  9. </bean>   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值