天天看点

spring MVC 3.1 注解:@ResponseBody 返回json数据

pring mvc如何返回json 数据的,大概有如下几种:

Spring MVC 3.0 返回JSON数据的方法

1. 直接 PrintWriter 输出

2. 使用 JSP 视图

3. 使用Spring内置的支持

以下为3.1之前的配置:

Html代码  

spring MVC 3.1 注解:@ResponseBody 返回json数据
  1. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
  2.  <property name="messageConverters">  
  3.   <list>  
  4.    <bean  
  5.     class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />  
  6.   </list>  
  7.  </property>  
  8. </bean>  

重点来了!

以下为3.1的配置:

spring mvc 3.1之后使用RequestMappingHandlerMapping和RequestMappingHandlerAdapter

替代了原有的DefaultMethodHandlerMapping和AnnotationMethodHandlerAdapter,

所以,3.1的返回json配置可以使用如下配置:

Html代码  

spring MVC 3.1 注解:@ResponseBody 返回json数据
  1. <bean  
  2. class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"  
  3.         p:ignoreDefaultModelOnRedirect="true" >  
  4.             <property name="messageConverters">  
  5.                 <list>  
  6.                     <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>  
  7.                 </list>  
  8.             </property>  
  9.         </bean>  

// WEB-INF/lib 中添加

jackson-mapper-asl-1.6.4.jar

jackson-core-asl-1.6.4.jar

// Controller 中 使用:@ResponseBody 标注方法,该方法返回 Java对象(支持复杂对象),

如:

Java代码  

spring MVC 3.1 注解:@ResponseBody 返回json数据
  1. public  @ResponseBody   User getUser(User u){  
  2.     return u;  
  3. }  

MappingJacksonHttpMessageConverter 会将对象转换为 JSON 输出

注意:当springMVC-servlet.xml中使用<mvc:annotation-driven />时,如果是3.1之前已经默认注入AnnotationMethodHandlerAdapter,3.1之后默认注入RequestMappingHandlerAdapter只需加上上面提及的jar包即可!

注意:默认情况下MappingJacksonHttpMessageConverter 会设置content为application/json,在IE9下返回会出现提示下载的现象,出现这种情况可以手动指定头信息为"text/html",或者"**" />  

  •         </list>  
  •     </property>  
  • </bean>