SpringMVC默认处理的字符集是ISO-8859-1。
接口定义为 @ResponseBody,使用的返回值处理器为 RequestResponseBodyMethodProcessor,使用HttpMessageConverter 消息转换机制,会调用对应的 HttMessageConverter 处理类。支持 String 类型的消息转换器有 StringHttpMessageConverter, MappingJackson2HttpMessageConverter。系统默认支持的媒体列表有:
取得媒体列表后,会选取其中的一个:
从图中可以看出 String 返回值类型取得的媒体类型为 text/plain;charset=ISO-8859-1,且使用 StringHttpMessageConverter 消息转换类。将该媒体类型设置为 response 的 contentType, 因此返回中文乱码:
可修改字符编码,如 springmvc.xml 文件加上如下配置:
<mvc:annotation-driven >
<!-- 消息转换器 -->
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/plain;charset=UTF-8"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>