关闭

SpringMVC配置返回pdf/json/xml等不同的视图

1610人阅读 评论(0) 收藏 举报
分类:
       spring mvc通过使用org.springframework.web.servlet.view.ContentNegotiatingViewResolver,就可以根据不同的场景返回不同的view了,比如返回json,xml,pdf等不同视图。代码实现如下: 

先是一个简单的pojo 
Java代码  
  1. package com.hmkcode.vo;  
  2.    
  3. import javax.xml.bind.annotation.XmlRootElement;  
  4.    
  5. @XmlRootElement(name = "person")  
  6. public class Person {  
  7.    
  8.     private int id;  
  9.     private String name;  
  10.     public int getId() {  
  11.         return id;  
  12.     }  
  13.     public void setId(int id) {  
  14.         this.id = id;  
  15.     }  
  16.     public String getName() {  
  17.         return name;  
  18.     }  
  19.     public void setName(String name) {  
  20.         this.name = name;  
  21.     }  
  22.     public String toString(){  
  23.         return "ID: "+id+" - Name: "+name;  
  24.     }  
  25.    
  26. }  

   注意使用@XmlRootElement标签之。 

然后是controller: 
  
Java代码  
  1. @Controller  
  2. public class MyController {  
  3.    
  4.     @RequestMapping("/view")  
  5.     public Person getPerson(Model model){  
  6.         Person person = new Person();  
  7.         person.setId(1);  
  8.         person.setName("test");  
  9.         model.addAttribute("person",person);  
  10.         return person;  
  11.     }  


  然后分别假设要导出为PDF的view,引入著名的itext了; 
Java代码  
  1. public class PdfView extends AbstractPdfView {  
  2.    
  3.     protected void buildPdfDocument(  
  4.         Map model,  
  5.         Document doc,  
  6.         PdfWriter writer,  
  7.         HttpServletRequest req,  
  8.         HttpServletResponse resp)  
  9.         throws Exception {  
  10.    
  11.        
  12.         Person person = (Person) model.get("person");  
  13.         doc.add( new Paragraph(person.toString()));  
  14.    
  15.     }  

   这里演示简单往itext中写入一个输出而已; 

然后是web.xml: 

Java代码  
  1. <servlet>  
  2.         <servlet-name>springmvc</servlet-name>  
  3.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.         <load-on-startup>1</load-on-startup>  
  5.     </servlet>  
  6.    
  7.     <servlet-mapping>  
  8.         <servlet-name>springmvc</servlet-name>  
  9.         <url-pattern>/rest/*</url-pattern>  
  10.     </servlet-mapping>  

  最核心的配置来了: 

Java代码  
  1.    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">  
  2. <property name="order" value="1" />  
  3. <property name="mediaTypes">  
  4.   <map>  
  5.      <entry key="json" value="application/json" />  
  6.      <entry key="xml" value="application/xml" />  
  7.      <entry key="pdf" value="application/pdf" />  
  8.   
  9.   </map>  
  10. </property>  
  11.   
  12. <property name="defaultViews">  
  13.   <list>  
  14.     <!-- JSON View -->  
  15.     <bean  
  16.       class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">  
  17.     </bean>  
  18.     <!--  XML view -->  
  19.       <bean class="org.springframework.web.servlet.view.xml.MarshallingView">  
  20.       <constructor-arg>  
  21.           <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">  
  22.              <property name="classesToBeBound">  
  23.               <list>  
  24.                  <value>com.test.Person</value>  
  25.               </list>  
  26.              </property>  
  27.           </bean>  
  28.       </constructor-arg>  
  29.     </bean>  
  30.     <!--  PDF view -->  
  31.     <bean class="com.test.PdfView">  
  32.   
  33.       </bean>  
  34.    </list>  
  35. </property>  
  36. <property name="ignoreAcceptHeader" value="true" />  
  37.   
  38. t;/bean>  

   
   可以看到,其中使用的是: org.springframework.web.servlet.view.ContentNegotiatingViewResolver,对其pdf,xml.json进行分别的view设置,JSON用的是著名的jackyson去解析了; 最后,通过rest风格的地址,比如
http://localhost/view/view.json,返回json; 通过http://localhost/view/view.pdf,则导出到pdf,http://localhost/view/view.xml, 返回前端就xml了,十分方便。
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Spring 4 MVC 视图解析器(XML JSON PDF等) 纯注解(带源码)【推荐】

原文地址:http://websystique.com/springmvc/spring-4-mvc-contentnegotiatingviewresolver-example/ 【本系列其他教程正在陆续翻译中,点击分类:spring 4 mvc 进行查看。源码下载地址在文章末尾。】 【翻译 b...
  • w605283073
  • w605283073
  • 2016-05-07 16:37
  • 4614

springmvc多视图支持--json、xml等

springmvc提供对多种视图的支持,json、xml、excel、pdf、等等 1、首先在springmvc配置文件中加入相关配置: <bean class="org.springframework.web.servlet.view.ContentNegotiatin...
  • USTC_Zn
  • USTC_Zn
  • 2017-03-07 00:05
  • 699

spring mvc 在同一个controller 中同时返回多种格式的数据 (xml json atom)

在本篇文章中,我们来学习spring MVC中返回的数据格式,这种方式在写接口时,非常适用也非常实用, 其实在spring mvc 中本身对数据的返回格式已经封装的非常好,同时支持多种格式,使用到的是 内容协商者 也就是如下类:  (详细配置如下) org.springframewo...
  • u010695794
  • u010695794
  • 2015-12-09 22:33
  • 2445

SpringMVC整合JSON、XML视图

SpringMVC整合JSON、XML视图,代码下载地址:http://www.zuidaima.com/share/1751862737554432.htm
  • yaerfeng
  • yaerfeng
  • 2014-04-16 10:44
  • 9743

Spring MVC 3.1多视图协商配置(json、xml、freemarker)

Spring mvc可以配置多种视图,比如json、xml、ftl等等(REST内容协商)。 RESTful服务中很重要的一个特性是对于同一资源,可以有多种表述形式。 既然是协商视图,那么Spring MVC REST改如何决定采用何种方式(视图)展示内容呢? 第一种:根据http requ...
  • yu412346928
  • yu412346928
  • 2014-03-06 16:47
  • 1944

SpringMVC配置JSON、JSP、FreeMark多视图解析器配置

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这...
  • dearsny
  • dearsny
  • 2015-04-25 21:58
  • 3795

SpringMVC返回XML或者JSON格式的数据

SpringMVC的web.xml配置我就不说了…在applicationContext-servlet.xml文件配置中加入如下注册默认的消息转换器:<mvc:annotation-driven/>controller: @RequestMapping(method=Reques...
  • u013632755
  • u013632755
  • 2015-06-08 13:53
  • 9846

Spring MVC自动返回XML/JSON

Spring实现同一资源,多种表述
  • jinzhencs
  • jinzhencs
  • 2015-12-11 16:07
  • 2205

java中的XML注解,使用SpringMVC返回xml文件

工作了也有七个月了,在公司做支付其实感觉自己更多的是熟悉业务。技术方面就是修修补补。真心感觉想学技术难,自己也暗自想了一下前段时间在某支付公司和某o2o公司纠结的时候还真是有些头脑不清醒。下面是我从业务中拿来的代码片段。一起学习和探讨一下。 在以前我自己真没有研究过无论是网页还是后台程序怎样返回x...
  • chenpeng19910926
  • chenpeng19910926
  • 2016-11-14 10:01
  • 246

spring mvc实现Restful返回xml格式数据

最近,想在自己的小项目中搭建一个Restful风格的服务接口api,项目用的spring mvc 3,听说spring mvc本身就能十分方便的支持restful的实现,于是查询了下资料,果然非常强大。 在一次偶然的#墙#外#(你懂的)状态下浏览到了一个老外的博客,举了几个入门例子十分经典,原文是...
  • johnjobs
  • johnjobs
  • 2014-07-16 16:08
  • 2350
    个人资料
    • 访问:1516373次
    • 积分:17307
    • 等级:
    • 排名:第664名
    • 原创:155篇
    • 转载:913篇
    • 译文:34篇
    • 评论:213条
    文章分类
    最新评论