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);
}
});
在網(wǎng)上找了很久,也嘗試修改了 tomcat 工程里的 server.xml 文件也無濟于事,最后找到原因和解決辦法。
原因:
spring MVC有一系列HttpMessageConverter去處理用@ResponseBody注解的返回值,如返回list或其它則使用 MappingJacksonHttpMessageConverter,返回string,則使用 StringHttpMessageConverter,而這個convert使用的是字符集是iso-8859-1,而且是final的。所以在當返回json中有中文時會出現(xiàn)亂碼。
解決方法:
方法一:在配置文件中的mvc:annotation-driven中添加如下代碼:
<mvc:annotation-driven >
<!-- 消息轉(zhuǎn)換器 -->
<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;"})