Spring3.0 MVC @ResponseBody作用:把返回值直接写到HTTP response body里。
Spring3MVC在处理@ResponseBody这个annotation的时候,
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter使用了
org.springframework.http.converter.StringHttpMessageConverter进行处理,而
org.springframework.http.converter.StringHttpMessageConverter的默认编码是
ISO-8859-1,因此会中文乱码。
解决办法:
(一) 在spring mvc的配置文件中手工配置bean:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" >
<property name="messageConverters">
<list>
<bean class = "org.springframework.http.converter.StringHttpMessageConverter">
<property name = "supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
通过配置AnnotationMethodHandlerAdapter类messageConverters属性来指定编码。
需要去掉<mvc:annotation-driven />,把bean部分加入到<context:component-scan base-package="控制包名" />前面
(二)在@ResponseBody的方法中设置response的ContentType
@ResponseBody
@RequestMapping(value = "xxx",method = RequestMethod.GET)
public String method(HttpServletRequest request,
HttpServletResponse response){
.....
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print(你的json.toString());
return null;
}