zoukankan      html  css  js  c++  java
  • Spring MVC中默认的ResponseBody为String的乱码问

    在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呀。

  • 相关阅读:
    [链接]实现GEF程序中的剪切/复制/粘贴功能
    管理Oracle数据库要注意的一些问题
    [Eclipse]GEF入门系列(五、浅谈布局)
    由于Eclipse版本不符造成的异常
    [Eclipse]处理颜色类型的偏好项
    [Eclipse]关于EMF
    [Eclipse]GEF入门系列(六、添加菜单和工具条)
    《敏捷个人认识自我,管理自我》前言
    【敏捷个人俱乐部】QQ群第二次公开接受加入 及 12月4日晚上聊天记录
    101与金根回顾敏捷个人:(97)通过实践TOGAF来思考如何学习并应用新的方法?
  • 原文地址:https://www.cnblogs.com/spiritualWindows/p/4325787.html
Copyright © 2011-2022 走看看