Spring @ResponseBody 返回乱码 的优雅解决办法
版权声明:本文为博主原创文章,未经博主允许不得转载。
返回的结果中,中文全部被问号(?)代替的解决办法:
- <bean id="utf8Charset" class="java.nio.charset.Charset"
- factory-method="forName">
- <constructor-arg value="UTF-8"/>
- </bean>
- <mvc:annotation-driven>
- <mvc:message-converters>
- <bean class="org.springframework.http.converter.StringHttpMessageConverter">
- <constructor-arg ref="utf8Charset" />
- </bean>
- </mvc:message-converters>
- </mvc:annotation-driven>
思路非常简单:查看StringHttpMessageConverter可知其有两个构造函数,
- public StringHttpMessageConverter() {
- this(DEFAULT_CHARSET);
- }
- public StringHttpMessageConverter(Charset defaultCharset) {
- super(new MediaType("text", "plain", defaultCharset), MediaType.ALL);
- this.defaultCharset = defaultCharset;
- this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values());
- }
这里采用第二个构造函数向其中注入我们的utf8Charset
上面配置会覆盖 mvc:annotation-driven 默认配置的StringHttpMessageConverter,其余的MessageConverter应该不会受到影响。
具体文档描述如下:
- Element : message-converters
- Configures one or more HttpMessageConverter types to use for converting @RequestBody method parameters and
- @ResponseBody method return values. Using this configuration element is optional. HttpMessageConverter
- registrations provided here will take precedence over HttpMessageConverter types registered by default. Also see
- the register-defaults attribute if you want to turn off default registrations entirely.
<mvc:annotation-driven>会默认配置一些HttpMessageConverter,Spring Reference描述如下:
- HttpMessageConverter support for @RequestBody method parameters and @ResponseBody method return values from @RequestMapping or @ExceptionHandler methods.
- This is the complete list of HttpMessageConverters set up by mvc:annotation-driven:
- ByteArrayHttpMessageConverter converts byte arrays.
- StringHttpMessageConverter converts strings.
- ResourceHttpMessageConverter converts to/from org.springframework.core.io.Resource for all media types.
- SourceHttpMessageConverter converts to/from a javax.xml.transform.Source.
- FormHttpMessageConverter converts form data to/from a MultiValueMap<String, String>.
- Jaxb2RootElementHttpMessageConverter converts Java objects to/from XML — added if JAXB2 is present on the classpath.
- MappingJackson2HttpMessageConverter (or MappingJacksonHttpMessageConverter) converts to/from JSON — added if Jackson 2 (or Jackson) is present on the classpath.
- AtomFeedHttpMessageConverter converts Atom feeds — added if Rome is present on the classpath.
- RssChannelHttpMessageConverter converts RSS feeds — added if Rome is present on the classpath.
返回的结果中,中文全部是乱码(非问号)的解决办法:
在web.xml中加入以下Filter:
- <filter>
- <filter-name>encodingFilter</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>encodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>

Spring @ResponseBody 返回乱码 的优雅解决办法的更多相关文章
- Spring3 MVC使用@ResponseBody的乱码问题及解决办法
近日用Spring3的MVC写东西,深感其之于Webwork/Struts2的便利,但是在通过@ResponseBody这个annotation输出一个json字符串的时候,发现页面上获得的json字 ...
- Linux下Oracle中SqlPlus时上下左右键乱码问题的解决办法
window下的sqlplus可以通过箭头键,来回看历史命令,用起来非常的方便. 但是在Linux下,会出现各种乱码,非常不方便,如下图所示,每次打错一个字符就需要重新打一遍. 解决办法:rlwrap ...
- jmete察看结果树和body data乱码问题的解决办法
jmeter察看结果树乱码问题的解决办法: (1)在jmeter的bin目录下找到jmeter.properties这个文件添加sampleresult.default.encoding=utf-8 ...
- [java] bug经验 Unable to locate Spring NamespaceHandler for XML schema namespace解决办法
报错关键字: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration probl ...
- PHP JSON乱码简洁的解决办法
PHP JSON乱码简洁的解决办法 $arr = array('ret'=>400, 'msg'=>'服务器地址不允许', 'data'=>''); foreach ( $arr a ...
- eclipse中js中文乱码问题的解决办法
在Eclipse中编辑JS文件简直是一种折磨,但是却总是很无奈得要去适应. 这里说一下Eclipse中,编辑JS文件时候,出现中文乱码问题的解决办法. 这个问题很容易想到是文件编码的问题,因此通常是修 ...
- (tamcat控制台乱码)在idea中运行toncat后控制台出现乱码的情况解决办法(教程附图)。
详细教程: (tamcat控制台乱码)在idea中运行toncat后控制台出现乱码的情况解决办法(教程附图)._IT打工酱的博客-CSDN博客
- spring mvc 返回乱码SpringMVC使用@ResponseBody注解返回中文字符串乱码的问题
原文地址:https://www.cnblogs.com/fzj16888/p/5923232.html 先说一下我的经历,以及解决问题的而过程. 在使用SpringMVC的时候,最开始的时候在配置文 ...
- Spring @ResponseBody 返回中文乱码问题
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt102 今天在使用spring 的时候,发现中文返回的是乱码. 经过研究发现, ...
随机推荐
- 大鱼吃小鱼(运用stack的模拟)
个人心得:这一题在暑假集训的周测里做到过,当时就死模拟,然后卡了很久很久才做对.现在发现运用stack其实非常方便, 将向左向右游动的鱼分开,则往后走只要往右移动的就放入stack,往左的时候就与st ...
- LeetCode Number of Longest Increasing Subsequence
原题链接在这里:https://leetcode.com/problems/number-of-longest-increasing-subsequence/description/ 题目: Give ...
- django的settings文件
转载:http://www.cnblogs.com/likeshan168/articles/3596344.html
- 数据库使用JDBC连接的方式
下面罗列了各种数据库使用JDBC连接的方式,可以作为一个手册使用. 1.Oracle8/8i/9i/10g/11g数据库(thin模式) Class.forName("oracle.jdbc ...
- 系列文章----.Net程序员学用Oracle系列
.Net程序员学用Oracle系列(18):PLSQL Developer 攻略 .Net程序员学用Oracle系列(17):数据库管理工具(SQL Plus) .Net程序员学用Oracle系列(1 ...
- Python函数-int()
int(x, [base]) 作用: 将一个数字或base类型的字符串转换成整数. int(x=0) int(x, base=10),base缺省值为10,也就是说不指定base的值时,函数将x按十进 ...
- SQL Sever 学习系列之二
SQL Sever 学习系列之二 SQL Server 学习系列之一(薪酬方案+基础) 四.有关时间输出问题 select GETDATE() 日期时间 ----显示为:2013-07 ...
- laravel的小坑
写控制器的名的时候只能出现一个首写大写字母, 后面的都为小写字母 否则会报找不到该控制器的错误
- Python numpy函数:reshape()
reshape()函数用于改变数组对象的形状: import numpy as np a = np.array([1,2,3,4,5,6,7,8]) #转换成2D数组 b = a.reshape((2 ...
- Rails的静态资源管理(一)——Asset Pipeline是什么
官方文档:http://guides.ruby-china.org/asset_pipeline.html http://guides.rubyonrails.org/asset_pipeline.h ...