controlller 代码:
@RequestMapping(value = "/user/getUsers.do", method = RequestMethod.GET)
@ResponseBody
public String getUsers() {
return userService.getUserList();
}
js 代码:
$.ajax({
type:'GET',
url:'/user/getUsers.do',
scriptCharset: 'utf-8',
success: function (response) {
alert(resoponse);
}
});
在网上找了很久,也尝试修改了 tomcat 工程里的 server.xml 文件也无济于事,最后找到原因和解决办法。
原因:
spring MVC有一系列HttpMessageConverter去处理用@ResponseBody注解的返回值,如返回list或其它则使用 MappingJacksonHttpMessageConverter,返回string,则使用 StringHttpMessageConverter,而这个convert使用的是字符集是iso-8859-1,而且是final的。所以在当返回json中有中文时会出现乱码。
解决方法:
方法一:在配置文件中的mvc:annotation-driven中添加如下代码:
<mvc:annotation-driven >
<!-- 消息转换器 -->
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
方法二:在 RequestMapping 中加入 produces:
@RequestMapping(value = "***",produces={"text/html;charset=UTF-8;","application/json;"})