`
徜徉の小溪
  • 浏览: 447973 次
  • 性别: 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这个顺序配置了,结果还是中文乱码。是还有什么别注意点么?

相关推荐

    SpringMVC中解决@ResponseBody注解返回中文乱码问题

    本文将详细介绍如何解决SpringMVC中`@ResponseBody`注解返回中文乱码的问题。 首先,我们可以尝试使用`@RequestMapping`注解的`produces`属性来指定响应内容的MIME类型和字符集。例如: ```java @RequestMapping...

    Springmvc如何返回xml及json格式数据

    总结,Spring MVC通过`@ResponseBody`注解和指定`produces`属性可以方便地返回XML和JSON格式的数据。返回XML时需要关注字符编码,返回JSON时则可以直接返回对象。避免一些错误尝试,如直接返回XML字符串或未序列化的...

    解决SpringMvc后台接收json数据中文乱码问题的几种方法

    当前端通过Ajax使用JSON格式向SpringMvc后台发送数据时,可能出现中文乱码。这通常是因为服务器默认的字符编码不支持UTF-8导致的。以下是两种解决方法: - 方式一:在Controller方法中手动转码 在接收到请求参数...

    用ajax传递json到前台中文出现问号乱码问题的解决办法

    后来发现,因为在controller中返回json用了@ResponseBody,而spring源码中@ResponseBody 的实现类发现其默认的编码是 iso-8859-1,而项目用的编码为utf-8,所以传中文会出现乱码。 这里我使用了注解来解决: @...

    SpringMVC请求/响应乱码问题解决方案解析

    SpringMVC请求/响应乱码问题是指在使用SpringMVC框架进行Web开发时,请求参数或响应内容出现乱码的问题。这种问题的出现是由于字符编码的不一致所引起的。本文将详细介绍SpringMVC请求/响应乱码问题解决方案,并提供...

    Spring MVC面试宝典1.pdf

    在控制器中,可以使用@ResponseBody注解返回JSON数据给前端。 ##### 3.4 如何解决POST请求中文乱码问题,GET的又如何处理呢? - **POST请求**:在web.xml中配置过滤器CharacterEncodingFilter来设置字符编码。 - **...

    分享SpringMVC归纳

    - 使用`@ResponseBody`注解将Java对象转换为JSON数据。 ```java @RequestMapping(value = "/items", method = RequestMethod.POST) public @ResponseBody Item addItem(@RequestBody Item newItem) { // 业务...

    Spring MVC面试题(2022最新版)

    此外,还可以使用`@RestController`,该注解是`@Controller`和`@ResponseBody`的组合,适用于只返回JSON或XML数据而不返回视图的情况。 **@Controller注解的作用**:用于定义一个类为Spring MVC控制器,该类将处理...

    springmvc 发送ajax出现中文乱码的解决方法汇总

    在开发Web应用时,Spring MVC和Ajax的交互过程中,经常遇到中文乱码的问题。这个问题主要出现在数据从服务器传输到客户端的过程中,由于编码设置不正确,导致中文字符无法正常显示。以下将详细介绍四种解决Spring ...

    SpringMVC面试题(2024最新版).docx

    **处理中文乱码**: POST请求通过设置Filter解决,GET请求可以通过设置`CharacterEncodingFilter`。 **异常处理**: 可以自定义异常处理器,比如使用@ControllerAdvice和@ExceptionHandler注解。 **获取Request、...

    Springmvc完成ajax功能实例详解

    通过使用`@ResponseBody`注解和Jackson库,我们可以方便地将Java对象转换为JSON,然后通过AJAX发送到客户端。同时,注意设置正确的字符编码,以确保中文字符能正确显示。通过实践这些知识点,你可以在你的项目中轻松...

    SpringMVC面试题.pdf

    - 在控制器方法上添加`@ResponseBody`注解,表明返回的是JSON数据。 - 在Ajax请求中,设置请求类型为GET或POST,指定请求URL,然后在成功回调中处理响应的JSON数据。 7. **处理乱码问题**: - 对于请求参数的...

    SpringMVC面试题(2020最新版).pdf

    处理中文乱码问题,可以设置HttpServletRequest的编码方式,对于POST请求,可以在过滤器中设置request.setCharacterEncoding("UTF-8");GET请求一般默认处理正确,但如果URL编码了,也需要解码。 Spring MVC的异常...

    SpringMVC+Jquery实现Ajax功能

    2. **返回响应数据**:在Controller方法中,可以构建JSON对象并使用`@ResponseBody`注解将其返回。SpringMVC会自动将其转换成JSON格式,供jQuery的Ajax请求接收。 3. **处理异常**:可以使用`@ExceptionHandler`...

    SpringMVC【入门】篇

    3. 文件上传:SpringMVC 支持传统方式和跨服务器方式的文件上传,需要配置 Filter 解决中文乱码问题,并考虑 Tomcat 对某些操作的限制。 4. 异常处理:通过 @ExceptionHandler 注解定义全局异常处理器,实现统一的...

    SSM集成应用

    - **中文乱码问题**:解决客户端与服务器间字符集不一致导致的问题。 - **自定义参数绑定实现日期转换**:通过自定义Converter或Formatter实现复杂类型的转换。 #### SSM集成 **4.1 整合分析** SSM框架整合主要...

    Spring MVC 关于controller的字符编码问题

    1. **不使用`@ResponseBody`注解**: 当不使用`@ResponseBody`时,你可以直接操作`HttpServletResponse`对象来设置响应内容的类型和字符集。例如: ```java @RequestMapping(value = "/rest/create/document") ...

    idea+maven+ssm

    SpringMVC可以配置ResponseBody和RequestBody注解来处理HTTP请求和响应的JSON数据。 9. **IDEA集成**:IntelliJ IDEA提供了丰富的SSM集成功能,如智能代码提示、代码格式化、调试支持等,使得开发更加便捷。在IDEA...

Global site tag (gtag.js) - Google Analytics