`
徜徉の小溪
  • 浏览: 442832 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SpringMVC使用注解@ResponseBody返回json中文乱码

阅读更多

  ---------------------------------------

   在这里我不得支持一下SpringMVC是一个不错的框架,用了springmvc这么长时间  我犯了个错误,说来惭愧.

在项目中编码格式是UTF-8    在使用Ajax 请求  在SpringMVC中返回Json 数据 我用到了@ResponseBody 注解  将表示该方法的返回结果直接写入HTTP response body中。 

 

  然后再数据库中取出的中文通过Spring的response返回结果中文乱码.

 

方法一

原因:

response在响应的时候 生成的response中"Content-Type"的值不正确。(默认的是ISO-8859-1)


然后使用Spring使用AnnotationMethodHandlerAdapter来处理@ResponseBody,该类再使用一些HttpMessageConverter来具体处理信息。 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.0.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/mvc
	http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
	
	<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>
	<context:component-scan base-package="com.zdkj.limp.controller"></context:component-scan>
	<mvc:annotation-driven />
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/" />
		<property name="suffix" value=".jsp"></property>
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
	</bean>
	
</beans>

 
 

以上是我就纠正回来的正确代码   以免误导大家  我贴出了正确的代码

 

 

下面那段是错误的代码

 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.0.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/mvc
	http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

	<context:component-scan base-package="com.zdkj.limp.controller"></context:component-scan>
	<mvc:annotation-driven />
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/" />
		<property name="suffix" value=".jsp"></property>
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView" />
	</bean>
	<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>
</beans>

 

 

大家看看有什么区别   

我找了半天都没找出原因  后来发现顺序不对

程序执行的时候先注解扫描包  没发现  org.springframework.http.converter.StringHttpMessageConverter

 

最后才执行org.springframework.http.converter.StringHttpMessageConverter当执行的时就不再去扫描了

所以最终结果是顺序放错了

 

 

 

 

----------------------------------------------------------------------------

 

 

附加的一个案例如果大家再碰到这种乱码问题   没办法  使用以下代码

 

方法 二

使用java中的urlEncoding 对字符进行编码  然后再到客户端js中进行urlDecoding进行解码  也可以解决乱码问题  但我不建议使用这种方法  治标不治本

 

 

服务器端   java代码如下:

	// URL编码
	protected String urlEncode(String src) {
		try {
			return URLEncoder.encode(src, "UTF-8");
		} catch (Exception ex) {
			return src;
		}
	}
 

 

 

客户端 js中 代码如下:

 

<script type="text/javascript">

	if (!misc) {
		var misc = {};
	}
	if (!misc.utils) {
		misc.utils = {};
	}
	misc.utils.urlencode2Utf8 = function(ptr) {
		for ( var x in ptr) {
			if (typeof (ptr[x]) == 'object') {
				misc.utils.urlencode2Utf8(ptr[x]);
			} else if (typeof (ptr[x]) == 'string') {
				try {
					ptr[x] = decodeURIComponent(ptr[x]);
				} catch (e) {

				}
			}
		}
	};
</script>
 

 

 

0
0
分享到:
评论
1 楼 Ripin_Yan 2016-05-26  
我已经按照你的xml这个顺序配置了,结果还是中文乱码。是还有什么别注意点么?

相关推荐

Global site tag (gtag.js) - Google Analytics