关于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>

  

 

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

 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值