关闭

Spring MVC中默认的ResponseBody为String的乱码问

211人阅读 评论(0) 收藏 举报
在Spring的MVC中,如果你使用的是中文,用的是UTF-8编码,有的时候我们会直接返回一个文本给前端的AJAX调用。Controllor中的代码如下:

Java代码 

  1. @ResponseBody
  2. @RequestMapping(value = "/test", method = RequestMethod.GET)  
  3. public String test() {  
  4. return"中文测试";  
  5. }  

 这时发现响应出来的是乱码。原因是Spring会采用默认的StringHttpMessageConverter类来进行String类型的响应处理。查看源码发现,这个类莫名其妙的把响应的编码写死了,这样就产生了乱码问题。其中有句代码是:

Java代码 

  1. publicstaticfinal Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");  

 

解决方法:

想到的方法是采用BeanPostProcessor,在Spring初始化好StringHttpMessageConverter之后进行修改响应类型。好在该类提供了setSupportedMediaTypes方法可以进行设置。所以实现的代码如下:

Java代码 

  1. publicclass UTF8StringBeanPostProcessor implements BeanPostProcessor{  
  2. @Override
  3. public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {  
  4. if(bean instanceof StringHttpMessageConverter){  
  5.             MediaType mediaType = new MediaType("text", "plain", Charset.forName("UTF-8"));  
  6.             List types = new ArrayList();  
  7.             types.add(mediaType);  
  8.             types.add(MediaType.ALL);
  1.             ((StringHttpMessageConverter) bean).setSupportedMediaTypes(types);  
  2.         }  
  3. return bean;  
  4.     }  
  5. @Override
  6. public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {  
  7. return bean;  
  8.     }  
  9. }  

 然后在配置文件上加入:

Xml代码 

  1. < span>beans:beanclass="com.walmart.bestsales.util.UTF8StringBeanPostProcessor"<</>beans:bean<

 这样就成功实现了UTF8编码的输出。

 

小结:采用BeanPostProcessor实现的好处就是不对已有的代码做修改,如果以后升级Spring也容易进行兼容。在国际化的大环境下,默认值至少也应该是UTF-8呀。

0
0
查看评论

Spring Mvc @ResponseBody String返回中文字符串乱码

Spring Mvc @ResponseBody 修饰方法返回String类型,出现乱码
  • LittleSkey
  • LittleSkey
  • 2016-10-19 19:32
  • 4360

Spring @ResponseBody 返回乱码 的优雅解决办法

返回的结果中,中文全部被问号(?)代替的解决办法: *-servlet.xml的部分配置如下: <bean id="utf8Charset" class="java.nio.charset.Charset" factory-method="...
  • u010957324
  • u010957324
  • 2013-06-25 22:45
  • 3360

spring MVC中@ResponseBody返回乱码的完美解决方案

http://hecks.iteye.com/blog/2165606点击打开链接  本来因为ajax跨域http远程调用时有问题,在服务端响应时用以下方式解决了,但IE8及下有问题。           ...
  • mynnnn
  • mynnnn
  • 2014-12-25 15:56
  • 943

如何彻底解决SpringMVC4.0下使用解决@ResponseBody 中文乱码问题

中文乱码这个问题很是头痛,各种解决中文乱码的方法
  • u013861835
  • u013861835
  • 2017-04-29 22:33
  • 1062

Spring Mvc中@ResponseBody中文乱码解决汇总

spring 3 mvc 的 @ResponseBody返回数据用起来很方便,但是中文乱码,而且返回的Content-Type不带编码信息,网上有很多解决方法,但是大部分都存在一些问题,这里只介绍一种,如下: 自己写一个继承StringHttpMessageConverter的类UTF8String...
  • b671900
  • b671900
  • 2015-10-14 15:53
  • 531

SpringMVC的@ResponseBody返回中文乱码的原因

SpringMVC的@ResponseBody返回中文乱码的原因是SpringMVC默认处理的字符集是ISO-8859-1,在Spring的org.springframework.http.converter.StringHttpMessageConverter类中可以看到如下代码: pu...
  • LanSeTianKong12
  • LanSeTianKong12
  • 2016-09-12 11:32
  • 3238

解决@ResponseBody注解返回中文乱码

解决@ResponseBody注解返回中文乱码 messageConverters supportedMediaTypes
  • zknxx
  • zknxx
  • 2016-09-03 16:50
  • 13910

Spring中Responsebody的作用

作用:        该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。 使用时机:    ...
  • Kevinzhangfei
  • Kevinzhangfei
  • 2015-04-07 17:29
  • 925

解决Spring3.0 MVC @ResponseBody Ajax返回中文乱码

主要是要注意spring-mvc.xml(spring 的 controller配置文件)中的相关配置项 ...
  • iamcnnetiger
  • iamcnnetiger
  • 2012-09-25 10:49
  • 6260

Spring 3.0.5 @ResponseBody 返回json中文乱码

要重写AbstractHttpMessageConverter类: 具体内容如下: package com.ylzinfo.util; import java.io.IOException; import java.io.InputStreamReader; import java.io.Ou...
  • asartear
  • asartear
  • 2014-12-11 15:11
  • 1515
    个人资料
    • 访问:31634次
    • 积分:746
    • 等级:
    • 排名:千里之外
    • 原创:63篇
    • 转载:11篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论