Spring MVC 中默认的 ResponseBody 为 String 的乱
码问题
在 Spring 的 MVC 中,假如你用法的是中文,用的是 UTF-8 编码,有的
时候我们会挺直返回一个文本给前端的 AJAX 调用。Conollor 中的代码
如下: @ResponseBody @RequestMap(value = "/test", method =
RequestMethod.GET) public String test() { return "中文测试";
这时发觉响应出来的是乱码。缘由是 Spring 会采纳默认的
StringHttpMessageConverter 类来举行 String 类型的响应处理。查看
源码发觉,这个类稀里糊涂的把响应的编码写死了,这样就产生了乱码
问题。其中有句代码是: public ic final Char DEFAULT_CHARSET =
Charset.forName("ISO-8859-1"); 解决办法: 想到的办法是采纳
BeanPostProcessor,在 Spring 初始化好 StringHttpMessageConverter
之后举行修改响应类型。好在该类提供了 setSupportMediaTypes 办法
可以举行设置。所以实现的代码如下: public class
UTF8StringBeanPostProcessor implements
BeanPostProcessor{ @Overre public Object
postProcessAfterInitialization(Object bean, String beanName)
throws BeansException { if(bean instaeof
StringHttpMessageConverter){ MediaType mediaType = new
MediaType("tt", "plain", Charset.forName("UTF-8")); List
MediaType types = new ArrayList MediaType types.a(mediaType);
((StringHttpMessageConverter)
bean).setSupportedMediaTypes(types); return bean;
@Override public Object
postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException { return bean; 然后在配置文件上加入:
beans:bean /beans:bean 这样就胜利实现了 UTF8 编码的输出。 小
结:采纳 BeanPostProcessor 实现的益处就是不对已有的代码做修改,
第 1 页 共 2 页
评论0
最新资源