spring @ResponseBody中文乱码问题

在spring mvc 中,通过ajax访问controller通常希望访问json对象,难免会遇到返回中文。

@RequestMapping("/test")
@ResponseBody
public String test(){
    return "Spring中文乱码问题";
}

如果直接这样返回,你会发现客户端取出的是乱码,遇到问题,我第一想法就是ResponseBody里面是否有参数设置编码,百度发现,spring没有提高设置编码,产生乱码的问题是spring默认使用的是ISO-8859-1.

<pre name="code" class="java">public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");

 

此代码在org.springframework.http.converter.StringHttpMessageConverter类中,此类继承了AbstractHttpMessageConverter抽象类,那就复制StringHttpMessageConverter写了一个UTF8ResponseBodyConverter,把这句改成了

public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");

在spring-mvc.xml中增加如下配置:

<bean  
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
    <property name="messageConverters">  
        <list>  
            <bean class="com.common.converter.UTF8ResponseBodyConverter" />  
        </list>  
    </property>  
</bean>  

本以为这样设置就可以解决中文乱码问题了,可是不行,又百度,http://blog.csdn.net/wuxinzaiyu/article/details/8813974,博客中说配置需要 写在controller的扫描配置之前,我这样设置了,但还是不行,可能是我的项目配置中有多个xml配置。

这种配置跟配置位置有关,个人觉得不好,不过给了提示,既然配置需要写在controller扫描配置之前,那为什么不能配置在<mvc:annotation-driven/>配置,又问百度,发现真的可以,配置如下:

       <mvc:annotation-driven>
	       	<mvc:message-converters>   
		      <bean class="org.springframework.http.converter.StringHttpMessageConverter">   
		          <property name="supportedMediaTypes">   
		              <list>   
		                  <value>text/plain;charset=UTF-8</value>   
		                  <value>text/html;charset=UTF-8</value>   
		              </list>   
		          </property>   
		      </bean>    
			</mvc:message-converters>
       </mvc:annotation-driven>

终于解决了,但是发现spring这点真不好配置啊,为了用@ResponseBody,解决中文麻烦,还不如直接PirntWriter输出,直接设置response参数就可以了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值