• 工作的时候用到spring返回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了,真的十分方便呀

  • 相关阅读:
    [CF149D] Coloring Brackets(区间dp)
    [CF1437E] Make It Increasing(LIS)
    洛谷试题之跳石头
    【模板】深搜和广搜
    高精度阶乘
    【模板】拓扑排序
    【模板】最小生成树——Kruskal算法
    判断素数的方法
    高精度乘法
    高精度加法
  • 原文地址:https://www.cnblogs.com/mrcharles/p/5035653.html
Copyright © 2020-2023  润新知