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

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

 

Spring MVC 3.0 返回JSON数据的方法
1. 直接 PrintWriter 输出
2. 使用 JSP 视图
3. 使用Spring内置的支持

以下为3.1之前的配置:

 

Html代码   收藏代码
  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之后使用RequestMappingHandlerMappingRequestMappingHandlerAdapter

替代了原有的DefaultMethodHandlerMappingAnnotationMethodHandlerAdapter

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

Html代码   收藏代码
  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代码   收藏代码
  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",或者"*/*"(所有,不确定就设这个)

如果是手动注入RequestMappingHandlerAdapter 可以这样设置

Html代码   收藏代码
  1. <bean  
  2.     class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"  
  3.     p:ignoreDefaultModelOnRedirect="true">  
  4.     <property name="messageConverters">  
  5.         <list>  
  6.             <bean  
  7.                 class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"  
  8.                 p:supportedMediaTypes="*/*" />  
  9.         </list>  
  10.     </property>  
  11. </bean>  


如果是采用mvc:annotation-driven标签 可以这样注入信息

 

Html代码   收藏代码
  1. <mvc:annotation-driven>  
  2.         <mvc:message-converters register-defaults="true">  
  3.             <bean  
  4.                     class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"  
  5.                     p:supportedMediaTypes="*/*" />  
  6.         </mvc:message-converters>  
  7.     </mvc:annotation-driven>  

4. 自定义

 

Html代码   收藏代码
  1. // 配置 BeanNameViewResolver  
  2. <bean class="org.springframework.web.servlet.view.BeanNameViewResolver">  
  3.  <property name="order" value="1" />  
  4. </bean>  
  5. <bean id="jsonView" class="test.TestJsonView" />  

 

Html代码   收藏代码
  1. // 实现 TestJsonView  
  2. public class TestJsonView extends AbstractView {  
  3.  @Override  
  4.  protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,  
  5.          HttpServletResponse response) throws Exception {  
  6.   JsonBuilder jb = new JsonBuilder();  
  7.   PrintWriter out = response.getWriter();  
  8.   out.print(jb.encode(model));  
  9.  }  
  10. }  

 

Html代码   收藏代码
  1. // Controller 中可以这样写:  
  2. ModelAndView mav = new ModelAndView("jsonView");  
  3. // mav.addObject ...  
  4. return mav;  



来源:http://yjflfliulei.iteye.com/blog/1755134

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值