博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 3 mvc中返回pdf,json,xml等不同的view
阅读量:6689 次
发布时间:2019-06-25

本文共 2797 字,大约阅读时间需要 9 分钟。

hot3.png

  spring mvc就是好,特别是rest风格的话,一个
org.springframework.web.servlet.view.ContentNegotiatingViewResolver就可以根据不同的场景返回不同的view了,比如返回json,xml,pdf等.马上看代码实现
先是一个简单的pojo
[code="java"]
package com.hmkcode.vo;
 
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement(name = "person")
public class Person {
 
    private int id;
    private String name;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String toString(){
        return "ID: "+id+" - Name: "+name;
    }
 
}
[/code]
   注意使用@XmlRootElement标签之。
然后是controller:
   [code="java"]
@Controller
public class MyController {
 
    @RequestMapping("/view")
    public Person getPerson(Model model){
        Person person = new Person();
        person.setId(1);
        person.setName("test");
        model.addAttribute("person",person);
        return person;
    }
[/code]
  然后分别假设要导出为PDF的view,引入著名的itext了;
[code="java"]
public class PdfView extends AbstractPdfView {
 
    protected void buildPdfDocument(
        Map model,
        Document doc,
        PdfWriter writer,
        HttpServletRequest req,
        HttpServletResponse resp)
        throws Exception {
 
     
        Person person = (Person) model.get("person");
        doc.add( new Paragraph(person.toString()));
 
    }
[/code]
   这里演示简单往itext中写入一个输出而已;
然后是web.xml:
[code="java"]
<servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
[/code]
  最核心的配置来了:
[code="java"]
         <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
      <property name="order" value="1" />
      <property name="mediaTypes">
        <map>
           <entry key="json" value="application/json" />
           <entry key="xml" value="application/xml" />
           <entry key="pdf" value="application/pdf" />
 
        </map>
      </property>
 
      <property name="defaultViews">
        <list>
          <!-- JSON View -->
          <bean
            class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
          </bean>
          <!--  XML view -->
            <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
            <constructor-arg>
                <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
                   <property name="classesToBeBound">
                    <list>
                       <value>com.test.Person</value>
                    </list>
                   </property>
                </bean>
            </constructor-arg>
          </bean>
          <!--  PDF view -->
          <bean class="com.test.PdfView">
 
            </bean>
         </list>
      </property>
      <property name="ignoreAcceptHeader" value="true" />
 
    </bean>
[/code]
   
   可以看到,其中使用的是:
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了,真的十分方便呀

转载于:https://my.oschina.net/jackyrong/blog/134673

你可能感兴趣的文章
pandas 修改 DataFrame 列名
查看>>
《2018年云上挖矿态势分析报告》发布,非Web类应用安全风险需重点关注
查看>>
leetcode409.Longest Palindrome
查看>>
Nervos 双周报第 3 期:佛系新年之后的开工大吉!
查看>>
【PHP 扩展开发】Zephir 基础篇
查看>>
字节跳动开源Go结构体标签表达式解释器,成请求参数校验的杀手锏
查看>>
怎么将在线录制的视频转为GIF动态图
查看>>
【剑指offer】顺时针打印矩阵
查看>>
leetcode讲解--861. Score After Flipping Matrix
查看>>
聊聊JavaScript和Scala的表达式 Expression
查看>>
[原]数据科学教程: 如何使用 mlflow 管理数据科学工作流
查看>>
JAVA 8 函数式接口--Supplier
查看>>
Dockerfile多阶段构建原理和使用场景
查看>>
七牛云赵之健:多维度融合赋能视频 AI 的实践
查看>>
CSS3中的box-sizing
查看>>
云计算新风向:多云战略优化企业云支出
查看>>
Windows改Linux(一),新建Ubuntu虚拟机小白向导
查看>>
HTML5调用手机前置摄像头或后置摄像头拍照,canvas显示,经过Android测试
查看>>
关于一个插图的翻译
查看>>
Spring Cloud构建微服务架构:分布式服务跟踪(入门)【Dalston版】
查看>>