使用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>