博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC中默认的ResponseBody为String的乱码问
阅读量:5054 次
发布时间:2019-06-12

本文共 1408 字,大约阅读时间需要 4 分钟。

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

转载于:https://www.cnblogs.com/spiritualWindows/p/4325787.html

你可能感兴趣的文章
Ubuntu 编译出现 ISO C++ 2011 不支持的解决办法
查看>>
Linux 常用命令——cat, tac, nl, more, less, head, tail, od
查看>>
VueJS ElementUI el-table 的 formatter 和 scope template 不能同时存在
查看>>
Halcon一日一练:图像拼接技术
查看>>
iOS设计模式 - 中介者
查看>>
centos jdk 下载
查看>>
HDU 1028 Ignatius and the Princess III(母函数)
查看>>
(转)面向对象最核心的机制——动态绑定(多态)
查看>>
token简单的使用流程。
查看>>
django创建项目流程
查看>>
Vue 框架-01- 入门篇 图文教程
查看>>
多变量微积分笔记24——空间线积分
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>
stdext - A C++ STL Extensions Libary
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>