原因
Spring 返回值为String类型的结果时使用了StringHttpMessageConverter
来转换
部分源码如下
public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {
public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
private final Charset defaultCharset;
private final List<Charset> availableCharsets;
private boolean writeAcceptCharset = true;
。。。
。。。
}
可见使用默认的编码是ISO-8859-1
方法一
修改方法,指定返回值编码
@RequestMapping(value="/getAllUser",method =RequestMethod.GET,produces = "text/html;charset=UTF-8")
设置produces = "text/html;charset=UTF-8"
方法二
修改项目的String返回值编码
如下配置,spring-mvc.xml中
<mvc:annotation-driven>
<!-- Spring 返回值为String类型的结果时使用了StringHttpMessageConverter 默认ISO-8859-1编码 -->
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg ref="utf8Charset"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 设置String返回值的编码 start-->
<bean id="utf8Charset" class="java.nio.charset.Charset" factory-method="forName">
<constructor-arg value="UTF-8"/>
</bean>
<!-- 设置String返回值的编码 end-->