日期:2014-05-16  浏览次数:20511 次

Ajax响应中文乱码 [Spring3MVC使用@ResponseBody处理Ajax请求]
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;
}