`
Ramls
  • 浏览: 37395 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于spring mvc ajax请求乱码问题 StringHttpMessageConverter

阅读更多

昨天看了不少的帖子,都没有解决StringHttpMessageConverter问题,今天在http://stackoverflow.com上面看到个帖子,希望对大家有用。关于这个问题造成的原因我就不解释了,相信大家也看了超多的帖子了。

我用的版本是spring mvc3.1.3

 

我个人觉得这个帖子还比较实用。给大家分享下

http://stackoverflow.com/questions/3616359/who-sets-response-content-type-in-spring-mvc-responsebody/7772620#7772620

 

很多的帖子都是说重写StringHttpMessageConverter,我得强调下:

However, using this method you have to redefine all HttpMessageConverters, and also it doesn't work with <mvc:annotation-driven />.

然而,用这个方法你不得不重新定义HttpMessageConverters,并且 他不得和<mvc:annotation-driven />.这个标签一起工作。 

 

既然不能工作,我们怎么办呢?

这里有一篇文章,我也就大概看了下,具体里面有没有错,我也没仔细看,没去验证,大家可以借鉴下。

  http://www.mspring.org/post/2012/7/14/1344938579544.html

 

另外stackoverflow.com上面提供了令外一种最方便却丑陋的(非常规)的方法 ,拦截theAnnotationMethodHandlerAdapter 的实例化

 

public class EncodingPostProcessor implements BeanPostProcessor {
    public Object postProcessBeforeInitialization(Object bean, String name)
            throws BeansException {
        if (bean instanceof AnnotationMethodHandlerAdapter) {
            HttpMessageConverter<?>[] convs = ((AnnotationMethodHandlerAdapter) bean).getMessageConverters();
            for (HttpMessageConverter<?> conv: convs) {
                if (conv instanceof StringHttpMessageConverter) {
                    ((StringHttpMessageConverter) conv).setSupportedMediaTypes(
                        Arrays.asList(new MediaType("text", "html", 
                            Charset.forName("UTF-8"))));
                }
            }
        }
        return bean;
    }

    public Object postProcessAfterInitialization(Object bean, String name)
            throws BeansException {
        return bean;
    }
}
-
<bean class = "EncodingPostProcessor " />

  

 最后我没有重写HttpMessageConverters,配置了原有的HttpMessageConverters(value = "text/plain;charset=UTF-8")不知道是不是符合你们的情况,但是解决了我的乱码问题。

我的配置是   (删除了 mvc:annotation-driven )

<!-- mvc:annotation-driven -->
	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>  

	<!--启动Spring MVC的注解功能,设置编码方式,防止乱码 -->
	<bean
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<!-- 把ByteArray加在Json前面 -->
				<bean
					class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /><!--有下载功能-->
				<bean
					class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
					<property name="supportedMediaTypes">
						<list>
							<value>text/html;charset=UTF-8</value>
						</list>
					</property>
				</bean>
				 <bean class = "org.springframework.http.converter.StringHttpMessageConverter">
		                <property name="supportedMediaTypes"  value = "text/plain;charset=UTF-8" />
	            </bean>
			</list>
		</property>
	</bean>

  

 

自己很懒的,就这样吧,有问题可以再讨论。

 

如果发现真的是误认子弟,切记提醒我删除。

 

1
1
分享到:
评论
2 楼 zhangthe9 2013-11-04  
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
1 楼 goodluck_wgw 2013-02-07  
<mvc:annotation-driven />已经包含 DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter,所以要解决乱码,直接定义这两个Bean,指定编码即可
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> 
   <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> 
但不能同<mvc:annotation-driven />一起使用,或者覆盖不起作用

相关推荐

    spring mvc 自學筆記

    在 Spring MVC 中,数据跳转主要指的是控制器(Controller)处理完请求后,将数据转发到视图(View)进行展示的过程。这里的“跳转”实际上是指请求处理后的视图重定向或转发。 #### 转发与重定向 - **转发(forward)**...

    Spring MVC参数传递中文乱码解决方法分享

    在 Web 开发中,参数传递中文乱码问题是一个常见的问题,特别是在使用 Spring MVC 框架时。这篇文章将详细介绍 Spring MVC 参数传递中文乱码解决方法,并提供了多种解决方案。 一、GET 方式中文乱码解决方案 在 ...

    Spring MVC面试题(2022最新版)

    如何解决POST请求中文乱码问题,GET的又如何处理呢? - 对于POST请求,可以在web.xml中配置字符编码过滤器,确保所有请求都使用统一的字符编码: ```xml &lt;filter-name&gt;characterEncodingFilter &lt;filter-class&gt;...

    ajax请求乱码的解决方法(中文乱码)

    本文将详细介绍如何解决Ajax请求中出现的中文乱码问题。 首先,我们需要理解Ajax请求的基本原理。Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个页面的情况下,与服务器交换数据并更新部分网页的技术...

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

    这四种方法都可以有效地解决Spring MVC在处理Ajax请求时的中文乱码问题。选择哪种方法取决于项目的具体情况和团队的开发习惯。通常情况下,推荐使用方法三或方法四,因为它们不需要修改Spring的原始库,同时能够确保...

    Spring MVC面试宝典1.pdf

    ##### 3.4 如何解决POST请求中文乱码问题,GET的又如何处理呢? - **POST请求**:在web.xml中配置过滤器CharacterEncodingFilter来设置字符编码。 - **GET请求**:同样可以通过配置过滤器解决,也可以通过修改Tomcat...

    struts中文乱码问题解决详细步骤

    然而,在处理中文字符时,可能会遇到乱码问题,这主要体现在请求参数、响应内容或者静态资源显示上。解决这个问题通常涉及到编码设置的调整,下面将详细介绍两种方法来解决Struts中的中文乱码问题。 **方法一:配置...

    Ajax乱码解决方案

    ### Ajax乱码解决方案 在进行Ajax开发的过程中,经常会遇到数据编码问题导致的乱码现象。这类问题虽然看似简单,但若处理不当,则可能耗费大量时间进行调试与解决。本文将结合一个具体的案例来探讨如何有效地解决...

    基于AJAX结合SpringMVC的信息访问服务模式研究

    Spring MVC的REST支持使得URI请求具有REST风格,与AJAX的HTTP接口获取资源的需求相吻合,能更好地发挥REST的优势。 实现AJAX访问Spring REST服务的过程如下: 1. **客户端**:客户端使用XMLHttpRequest对象发送...

    springmvc开发笔记

    在使用Spring MVC框架进行Web应用开发时,经常会遇到一个常见的问题——异步请求(尤其是AJAX请求)返回的数据出现乱码现象。这个问题通常发生在Spring MVC默认的编码方式与客户端或服务器端期望的编码不一致时。...

    ajax的responseText乱码的问题的解决方法

    在开发Web应用时,我们经常会遇到Ajax请求返回的数据(通常是`responseText`)出现乱码的问题,这可能会导致前端展示的信息无法正确理解。虽然JavaScript和IDE(如MyEclipse)的编码设置一致,但这并不意味着在Ajax...

    SpringMVC面试题.pdf

    Spring MVC 是一个强大的Java ...以上是对Spring MVC面试中常见的一些知识点的详细解答,这些内容涵盖了Spring MVC的基本概念、工作流程、核心组件、与其他框架的区别以及与AJAX的交互等方面,有助于理解和准备面试。

    springmvc-ajax

    项目介绍 这是一个 springmvc + ...也配置了转成json解决乱码的问题 &lt;!-- 1、支持HandlerMapper和HandlerAdapter --&gt; &lt;mvc&gt; &lt;!-- 转成json 为UTF-8 --&gt; &lt;mvc:message-converters register-default

    解决Ajax加载JSon数据中文乱码问题

    在本文中,我们将深入探讨如何解决Ajax加载JSON数据时出现的中文乱码问题。这个问题通常发生在前后端交互过程中,特别是当使用zTree等组件进行异步数据加载时。本文将通过一个具体的例子来阐述问题所在,并提供解决...

    json 中文乱码解决方案

    **假设场景**:一个简单的Java Web应用,使用Spring MVC框架,前端使用jQuery发起Ajax请求获取包含中文的JSON数据。 **步骤**: 1. **配置前端页面**: ```html &lt;!DOCTYPE html&gt; ...

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

    这样,无论是在AJAX请求中,还是在服务器响应中,只要双方对于字符编码的处理保持一致,即可避免乱码问题。 在实际开发中,除了显式设置@RequestMapping注解的produces属性外,还可以在全局的web.xml中配置字符编码...

    SpringMVC(九)文件上传和下载

    2. 文件编码:确保正确处理不同编码的文件名,避免乱码问题。 3. 断点续传:对于大文件,可以考虑实现断点续传功能,提高用户体验。 4. 性能优化:考虑使用缓存、CDN等技术提升下载速度。 在实际项目中,文件上传和...

    解决springmvc+mybatis+mysql中文乱码问题

    在上述问题中,当使用Ajax请求Spring MVC后台并从MySQL数据库查询数据时,页面显示中文出现了乱码。这通常涉及到多个环节的字符编码设置,包括前端、后端和数据库。 1. **前端响应头设置**: 在Ajax请求中,响应头...

    Springmvc完成ajax功能实例详解

    Spring MVC提供了一种简单的方式来处理AJAX请求,让我们一步步来看如何实现。 首先,为了将Java对象转换为JSON格式,我们需要引入Jackson库的jar包。Jackson是Java中广泛使用的JSON处理库,它允许我们将Java对象...

Global site tag (gtag.js) - Google Analytics