Spring 3 mvc中返回pdf,json,xml等不同的view

   spring mvc就是好,特别是rest风格的话,一个 
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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值