使用spring mvc3的@ResponseBody注解以期待返回json时,却发现返回值中文乱码。
研究后发现,spring使用该注解时在代码内部使用了硬编码iso-8859-1
解决方案:
想法有两种,一种是重写注解,还有一种是使用spring的BeanPostProcessor接口实现
/**
* 解决spring MVC3 中@ResponseBody的中文乱码问题。在bean中注册即可
*/
public class UTF8StringBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof StringHttpMessageConverter) {
MediaType mediaType = new MediaType("text", "plain", Charset.forName("UTF-8"));
List<MediaType> types = new ArrayList<MediaType>();
types.add(mediaType);
((StringHttpMessageConverter) bean).setSupportedMediaTypes(types);
}
return bean;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
再在spring的xml中注册
<!-- 解决使用@ResponseBody 的中文乱码。 --> <bean class="xxx.xxx.xxx.UTF8StringBeanPostProcessor"> </bean>
本文介绍了一种解决Spring MVC3中@ResponseBody返回JSON时中文乱码的方法。通过自定义UTF8StringBeanPostProcessor类并注册到Spring XML配置文件中,使StringHttpMessageConverter支持UTF-8编码。
473

被折叠的 条评论
为什么被折叠?



