SpringMVC的@ResponseBody返回中文乱码(???)的原因是SpringMVC默认处理的字符集是ISO-8859-1,在Spring的org.springframework.http.converter.StringHttpMessageConverter类中可以看到如下代码:
public static final Charset DEFAULT_CHARSET = Charset.forName(“ISO-8859-1”);
两种处理办法:
一:全局处理方式(笔者推荐)
在springmvc的配置文件中
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg ref="utf8Charset" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!--全局解决springmvc的@ResponseBody中文问号问题-->
<bean id="utf8Charset" class="java.nio.charset.Charset" factory-method="forName">
<constructor-arg value="UTF-8" />
</bean>
用这种方法轻松解决
二:在每个@RequestMapping请求中对produces属性进行赋值。
@RequestMapping(value="/user/findName",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
@ResponseBody
produces = {“application/json;charset=UTF-8”},加上这个也能解决,但是比较麻烦,需要使用@ResponseBody的地方全部需要加上对这个属性的赋值,所以笔者更喜欢第一种。