解决springMVC4下使用@ResponseBody的中文乱码问题
来源:互联网 发布:云南卫生网络直报系统 编辑:程序博客网 时间:2024/06/05 15:29
由于现在的项目一般都追求前后端分离,依靠Ajax进行通信,这样有助于团队分工、项目维护和后期的平台移植,这就使得后端框架对视图层的功能要求越来越低~
今天要说的是基于SpringMVC开发web后端时,为了简单而直接在控制器方法中返回json字符串时碰到的中文乱码问题。算是非常基础的问题,大牛请绕道~
其实我自己一开始也没觉得能有多复杂,认为一搜索就能找到一大把解决方案,所以没有计划耗费多久时间,更没打算转成写一篇博文记录过程。可不曾想到,足足花了我2个半小时,今天看来又要加班了!其实确实在GG和百度中搜索到了大量的相关解决方案,晒晒捡捡也发现至少有不下七八种解决方案。可悲剧的是统统在我测试下无效。
对于JAVAEE,我真真儿的是新手,项目也没有给我太多时间来深究源码,只能快速的试错,总算把几个方案拼凑出来一个能用的了!下面我就简单的说一下我的解决方法吧。
首先,我们要知道,为毛@ResponseBody不支持中文:传送门,这是我找到的写的最细的一篇文章了,尽管它并没有解决我的问题。
知道了原因,再来选择解决方案,一开始满心欢喜的找到一个最简单的方案:
@RequestMapping(value = "/add", produces = {"application/json;charset=UTF-8"})
可是不管用撒,原因不明~~
好吧,那再试一个:
response.setContentType("text/plain;charset=UTF-8");
也不行哇,这个其实只是设置了响应头中的字符集,但是@ResponseBody最终还是会把字符以“ISO-8859-1”的方式输出,可恶!
简单的方法木牛了,只能选择手动设置字符转换类了:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" > <property name="messageConverters"> <list> <bean class = "org.springframework.http.converter.StringHttpMessageConverter"> <property name = "supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> </list> </property> </bean>
注意,需要把这段放在xxx-servlet.xml中前面哦~
其实这样已经可以解决了,不过不完美,留一下这个时候的响应头,你会发现体积非常大(Accept-Charset会达到4K+),这是因为默认情况下StringHttpMessageConverter.writeInternal()会将所有可用字符集回写到响应头中,这会消耗非常大的带宽!浪费可耻!
一筹莫展了吧~幸好发现StringHttpMessageConverter提供的参数:writeAcceptCharset,所以最终的写法如下:
<!-- 用于使用@ResponseBody后返回中文避免乱码 --><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" > <property name="messageConverters"> <list> <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="writeAcceptCharset" value="false" /><!-- 用于避免响应头过大 --> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> </list> </property></bean>
哎,两个多小时就干了点儿这,感觉好尴尬啊!!
- 解决springMVC4下使用@ResponseBody的中文乱码问题
- 解决springMVC4下使用@ResponseBody的中文乱码问题
- 解决springMVC4下使用@ResponseBody 返回json数据的中文乱码问题
- 如何彻底解决SpringMVC4.0下使用解决@ResponseBody 中文乱码问题
- SpringMVC4.* @ResponseBody 中文乱码无法解决
- SpringMVC4.0.3 @ResponseBody JSON 中文乱码问题
- 使用@ResponseBody的中文乱码问题
- 解决SpringMVC使用@ResponseBody中文乱码(???)问题
- 解决responseBody 返回数据中文乱码的问题
- 使用@ResponseBody返回中文字符串,出现的乱码解决方式
- SpringMVC使用@ResponseBody注解返回中文字符串乱码的问题
- 解决SpringMVC的@ResponseBody返回中文乱码
- 解决SpringMVC的@ResponseBody返回中文乱码
- 解决SpringMVC的@ResponseBody返回中文乱码
- 解决SpringMVC的@ResponseBody返回中文乱码
- 解决SpringMVC的@ResponseBody返回中文乱码
- 解决SpringMVC的@ResponseBody返回中文乱码
- 解决SpringMVC的@ResponseBody返回中文乱码
- 【最大流 && 点限流】HDU
- Tomcat服务器下载与安装以及在MyEclipse上配置Tomcat服务器
- LeetCode-85-Maximal Rectangle 类似上一题,n遍单调栈
- Etnetera Brevity Challenge
- (51Nod 1183 编辑距离)字符串编辑距离
- 解决springMVC4下使用@ResponseBody的中文乱码问题
- Java 中带参无返回值方法的使用
- 线程间的通信机制
- 原创 蜂蜡等级生产工艺过程
- 详细谈一下自己对IOC跟AOP的详细理解
- Leetcode 680 Valid Palindrome II
- 国内计算机三大期刊+ JCST
- 实验二 线性表综合实验之双链表
- vue之登录路由验证