详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt102

今天在使用spring 的时候,发现中文返回的是乱码。

经过研究发现,主要是@ResponseBody 引起的。主要是由于 @ResponseBody 返回字符串结果的时候,使用了org.springframework.http.converter.StringHttpMessageConverter 中默认的编码。

请看 org.springframework.http.converter.StringHttpMessageConverter :

  1. public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {

  2. public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");

  3. private final List<Charset> availableCharsets;

  4. private boolean writeAcceptCharset = true;

  5. public StringHttpMessageConverter() {

  6. super(new MediaType("text", "plain", DEFAULT_CHARSET), MediaType.ALL);

  7. this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values());

  8. }

默认情况下,是ISO-8859-1编码,我们要将ISO-8859-1编码改成utf-8编码。

[java] view plaincopyprint?

  1. public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");

我们的解决方法是,在spring-servlet.xml中,加入一个bean

    1. <bean

    2. class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

    3. <property name="messageConverters">

    4. <list>

    5. <bean

    6. class="org.springframework.http.converter.StringHttpMessageConverter">

    7. <property name="supportedMediaTypes">

    8. <list>

    9. <bean class="org.springframework.http.MediaType">

    10. <constructor-arg index="0" value="text" />

    11. <constructor-arg index="1" value="plain" />

    12. <constructor-arg index="2" value="UTF-8" />

    13. </bean>

    14. </list>

    15. </property>

    16. </bean>

    17. </list>

    18. </property>

    19. </bean>

Spring @ResponseBody 返回中文乱码问题的更多相关文章

  1. 解决SpringMVC的@ResponseBody返回中文乱码

    SpringMVC的@ResponseBody返回中文乱码的原因是SpringMVC默认处理的字符集是ISO-8859-1,在Spring的org.springframework.http.conve ...

  2. Springboot @ResponseBody返回中文乱码

    最近我在把Spring 项目改造Springboot,遇到一个问题@ResponseBody返回中文乱码,因为response返回的content-type一直是application/json;ch ...

  3. SpringMVC @ResponseBody返回中文乱码

    SpringMVC的@ResponseBody返回中文乱码的原因是SpringMVC默认处理的字符集是ISO-8859-1, 在Spring的org.springframework.http.conv ...

  4. springboot同时支持访问html5和jsp时,导致后台ResponseBody返回中文乱码

    背景:原系统是由springboot jsp,所有访问都是jsp 现在需要做HTML5定位,要同时支持访问HTML5和JSP 在application.yml的spring标签下配置 mvc: #vi ...

  5. @ResponseBody 返回中文乱码问题解决 spingmvc

    <!-- UTF8解决乱码问题 --> <bean class="org.springframework.web.servlet.mvc.method.annotation ...

  6. SpringMVC ResponseBody返回中文乱码解决方案

    @RequestMapping(value = "/getForm") @ResponseBody public List<String> getForm(String ...

  7. 处理springMvc中responsebody返回中文乱码

    法一:   @RequestMapping(value="/getUsersByPage",produces = public String getUsers  法二:在sprin ...

  8. spring json 返回中文乱码

    如前台显示的json数据中的中文为???,则可尝试以下方法. 方法一(推荐):在@RequestMapping中添加  produces={"text/html;charset=UTF-8; ...

  9. @ResponseBody返回中文乱码

    1.在方法上修改编码 这种方式,需要对每个方法都进行配置. 2.修改springmvc的配置文件 同时注意,把这个配置写在扫描包的上面.

随机推荐

  1. Node.js 入门:Express + Mongoose 基础使用

    前言 Express 是基于 Node.js 平台的 web 应用开发框架,在学习了 Node.js 的基础知识后,可以使用 Express 框架来搭建一个 web 应用,实现对数据库的增删查改. 数 ...

  2. Redux源码分析之createStore

    接着前面的,我们继续,打开createStore.js, 直接看最后, createStore返回的就是一个带着5个方法的对象. return { dispatch, subscribe, getSt ...

  3. java_final修饰符

    1.修饰变量时,表示该变量一旦获得初始值就不可改变 final修饰的成员变量必须由程序员显示地指定初始值,系统不会进行隐式初始化 类变量:必须在初始化块中指定初始值或声明该类变量时指定初始值 实例变量 ...

  4. Python操作文件和目录

    Python操作文件和目录 读写文件比较简单,有一点特别注意就好了 windows下Python默认打开的文件以gbk解码,而一般我们的文件是utf-8编码的,所以如果文本含有中文,就会出现异常或者乱 ...

  5. This Adroid SDK r…

    有时候开启eclipse时会出现如下提示框: This Adroid SDK requires Android Developer

  6. LindAgile~大叔新宠~一个无所不能框架

    关于她 LindAgile是大叔在这两年里的新宠儿,它主推模块化,插件化,敏捷化,主要于LindAgile基础项目,LindAgile.Http项目,LindAgile.Modules项目和几个扩展模 ...

  7. PAT (Basic Level) Practise (中文) 1023. 组个最小数 (20)

    1023. 组个最小数 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定数字0-9各若干个.你可以以 ...

  8. [Scoi2014]方伯伯的玉米田 二维树状数组+动态规划

    考试最后半个小时才做这道题.十分钟写了个暴力还写挂了..最后默默输出n.菜鸡一只. 这道题比较好看出来是动规.首先我们要明确一点.因为能拔高长度任意的一段区域,所以如果从i开始拔高,那么一直拔高到n比 ...

  9. python学习===判断两个日期的间距天数

    import datetime   d1 = datetime.date(2015,10,7) d2 = datetime.date(2015,8,15) print((d1-d2).days)

  10. insertBefore 和 insetAfter函数详解

    在Javascript DOM编程艺术上面讲到,insertBefore(   )函数,即在已有元素前面插入一个新元素: 语法: parentElement . insertBefore(newEle ...