@ResponseBody 返回中文乱码

SpringMVC默认处理的字符集是ISO-8859-1。

接口定义为 @ResponseBody,使用的返回值处理器为 RequestResponseBodyMethodProcessor,使用HttpMessageConverter 消息转换机制,会调用对应的 HttMessageConverter 处理类。支持 String 类型的消息转换器有 StringHttpMessageConverter, MappingJackson2HttpMessageConverter。系统默认支持的媒体列表有:

@ResponseBody 返回中文乱码

取得媒体列表后,会选取其中的一个:

@ResponseBody 返回中文乱码

从图中可以看出 String 返回值类型取得的媒体类型为 text/plain;charset=ISO-8859-1,且使用 StringHttpMessageConverter 消息转换类。将该媒体类型设置为 response 的 contentType, 因此返回中文乱码:

@ResponseBody 返回中文乱码

可修改字符编码,如 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>