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

  • 相关阅读:
    BFS visit tree
    Kth Largest Element in an Array 解答
    Merge k Sorted Lists 解答
    Median of Two Sorted Arrays 解答
    Maximal Square 解答
    Best Time to Buy and Sell Stock III 解答
    Best Time to Buy and Sell Stock II 解答
    Best Time to Buy and Sell Stock 解答
    Triangle 解答
    Unique Binary Search Trees II 解答
  • 原文地址:https://www.cnblogs.com/spiritualWindows/p/4325787.html
Copyright © 2011-2022 走看看