使用@responseBody时,如果返回类型是String,那么它是不会使用jackson去解析的,而是使用StringHttpMessageConverter
。
我们配置了<mvc:annotation-driven>,那么定位到AnnotationDrivenBeanDefinitionParser类的getMessageConverters方法,可以看到它默认加载了很多MessageConverter,其中有一个就是StringHttpMessageConverter,它的默认编码方式:DEFAULT_CHARSET = Charset.forName("ISO-8859-1");所以要解决这类型的乱码现象,就是在配置文件中使用<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
来解决。
注意:我们定义了这样一个消息转换器后,spring会把它加载到MessageConverter集合中的第一个。