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"}) @ResponseBodyproduces = {“application/json;charset=UTF-8”},加上这个也能解决,但是比较麻烦,需要使用@ResponseBody的地方全部需要加上对这个属性的赋值,所以笔者更喜欢第一种。