关闭

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

1332人阅读 评论(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网站的观点或立场
    个人资料
    • 访问:1101210次
    • 积分:13436
    • 等级:
    • 排名:第1035名
    • 原创:149篇
    • 转载:870篇
    • 译文:33篇
    • 评论:158条
    文章分类
    最新评论