使用SpringMvc的@ResponseBody返回指定数据的类型做为http体向外输出,在浏览器里返回的内容里有中文,会出现乱码,项目的编码、tomcat编码等都已设置成utf-8,如下返回的是一个字符串中文乱码。

  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里强制指定返回的数据类型和字符编码,中文乱码解决,如下:

  1. @RequestMapping(value="user/get_comment_list.do",produces = "application/json; charset=utf-8")

下载地址 最主流的Java后台 SSM 框架 springmvc spring mybatis 项目源码
问题来了,如果项目里有很多类似这样的请求,每个请求都去配置produces,会很累赘且繁琐,查看了一下源代码,发现在spring处理ResponseBody时涉及到org.springframework.http.converter.StringHttpMessageConverter这个类,该类在默认实现中将defaultCharset设为ISO-8859-1。当@RequestMapping标记的方法未配置produces属性时,将自动使用默认编码;如果配置了produces属性,AbstractHttpMessageConverter中的write方法将不会受supportedMediaTypes影响,而用produce设置的header赋值给contenttype。改造一下RequestMappingHandlerAdapter的配置,springMvc.xml如下:

  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. <!-- 必须放在<mvc:annotation-driven>之前 -->
  12. <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
  13. <property name="messageConverters">
  14. <list>
  15. <bean class="org.springframework.http.converter.StringHttpMessageConverter">
  16. <property name="supportedMediaTypes">
  17. <list>
  18. <value>text/plain;charset=UTF-8</value>
  19. <value>text/html;charset=UTF-8</value>
  20. <value>applicaiton/javascript;charset=UTF-8</value>
  21. </list>
  22. </property>
  23. </bean>
  24. </list>
  25. </property>
  26. </bean>
  27. <!-- 扫描工程文件 -->
  28. <context:component-scan base-package="com.tcl.club.core" />
  29. <context:component-scan base-package="com.cus.back" >
  30. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
  31. </context:component-scan>
  32. <mvc:annotation-driven />
  33. <bean id="multipartResolver"
  34. class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
  35. <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀,在requestmapping输入的地址后自动调用该类进行视图解析 -->
  36. <bean id="viewResolver"
  37. class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  38. <property name="viewClass"
  39. value="org.springframework.web.servlet.view.JstlView" />
  40. <property name="prefix" value="/WEB-INF/view/" />
  41. <property name="suffix" value=".jsp" />
  42. </bean>
  43. </beans>

上述springMvc.xml文件重新设置了StringHttpMessageConverter的编码方式,而不必在每个@RequestMapping里设置produces属性。如果返回的Jackson类型的数据,可以设置成如下:

  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>

SpringMvc返回@ResponseBody中文乱码的更多相关文章

  1. 解决springmvc返回json中文乱码

    在pringmvc中通过设置@ResponseBody返回json乱码问题,这个问题上网找了很久,发现答案真是人云亦云,奉上我的解决方案: 解决方案一:需要导入 jackson-core-asl-1. ...

  2. SpringMvc Controller请求链接忽略大小写(包含拦截器)及@ResponseBody返回String中文乱码处理

    SpringMvc Controller请求链接忽略大小写(包含拦截器)及@ResponseBody返回String中文乱码处理... @RequestMapping(value = "/t ...

  3. 解决springmvc使用ResponseBody注解返回json中文乱码问题

    spring版本:4.2.5.RELEASE 查看“org.springframework.http.converter.StringHttpMessageConverter”源码,中有一段说明: B ...

  4. 解决springmvc+mybatis+mysql中文乱码问题【转】

    这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文 ...

  5. Hession集成Spring + maven依赖通讯comm项目 + 解决@ResponseBody中文乱码

    hessian结合spring的demo         hessian的maven依赖: <!-- hessian --> <dependency>         < ...

  6. springMvc解决json中文乱码

    springMvc解决json中文乱码 springMvc解决json中文乱码,springMvc中文乱码,spring中文乱码 >>>>>>>>> ...

  7. 如何解决http请求返回结果中文乱码

    如何解决http请求返回结果中文乱码 1.问题描述 http请求中,请求的结果集中包含中文,最终以乱码展示. 2.问题的本质 乱码的本质是服务端返回的字符集编码与客户端的编码方式不一致. 场景的如服务 ...

  8. SpringMVC的@ResponseBody返回JSON,中文乱码问题的解决.

    SpringMVC的@ResponseBody,返回json,如果有中文显示乱码的解决办法. 在SpringMVC的配置文件中 <bean class="org.springframe ...

  9. SpringMVC 使用@ResponseBody返回json 中文乱码与返回实体类报错

    有时候我们发现接收的是中文,返回却是个?.这确实是个蛋疼的问题,Spring中解析字符串的转换器默认编码居然是ISO-8859-1 /** * Implementation of {@link Htt ...

随机推荐

  1. git format-patch 用法

    git format-patch HEAD^ # git format-patch -s 1bbe3c8c197a35f79bfddaba099270a2e54ea9c7 please replace ...

  2. RedisCluster集群搭建

    搭建集群方案 安装部署任何一个应用其实都很简单,只要安装步骤一步一步来就行了.下面说一下 Redis 集群搭建规划,由于集群至少需要6个节点(3主3从模式),所以,没有这么多机器给我玩,我本地也起不了 ...

  3. Axios 请求配置参数详解

    axios API 可以通过向 axios 传递相关配置来创建请求 axios(config)   // 发送 POST 请求   axios({   method: 'post',   url: ' ...

  4. java.lang.IllegalArgumentException: No converter found for return value of type: class com.st.bean.User

    原因:springmvc默认是没有对象转换成json的转换器的,要添加jackson依赖 在pom.xml中添加 <dependency> <groupId>com.faste ...

  5. Javascript中两种最通用的定义类的方法

    在Javascript中,一切都是对象,包括函数.在Javascript中并没有真正的类,不能像C#,PHP等语言中用 class xxx来定义.但Javascript中提供了一种折中的方案:把对象定 ...

  6. 创建Android本地repo

    /**************************************************************************** * 创建Android本地repo * 说明 ...

  7. jQuery中排除指定元素,同时选择剩下的所有元素

    场景:某页面用了js延时加载技术处理所有图片,以改善用户体验,但是有几个图片不想延时加载,要求把它们单独挑出来. 研究了一下jQuery的API文档,搞掂了,jQuery真的很方便,贴在这里备份: 1 ...

  8. socket入门教程

    Server.cs   服务端程序 using System; using System.Collections.Generic; using System.ComponentModel; using ...

  9. c++实现数值的整数次方(类似pow())作用

    /* * 计算数值的整数次方.cpp * * Created on: 2018年4月13日 * Author: soyo */ #include<iostream> #include< ...

  10. c语言sscanf总结

    1函数原型 int scanf(const char *format,[,argument]...) extern int sscanf(_const char*_restrict_s,const c ...