spring mvc就是好,特别是rest风格的话,一个
org.springframework.web.servlet.view.ContentNegotiatingViewResolver就可以根据不同的场景返回不同的view了,比如返回json,xml,pdf等.马上看代码实现

先是一个简单的pojo

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

注意使用@XmlRootElement标签之。

然后是controller:

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

然后分别假设要导出为PDF的view,引入著名的itext了;

  1. public class PdfView extends AbstractPdfView {
  2. protected void buildPdfDocument(
  3. Map model,
  4. Document doc,
  5. PdfWriter writer,
  6. HttpServletRequest req,
  7. HttpServletResponse resp)
  8. throws Exception {
  9. Person person = (Person) model.get("person");
  10. doc.add( new Paragraph(person.toString()));
  11. }

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

然后是web.xml:

  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. <servlet-mapping>
  7. <servlet-name>springmvc</servlet-name>
  8. <url-pattern>/rest/*</url-pattern>
  9. </servlet-mapping>

最核心的配置来了:

  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. </map>
  9. </property>
  10. <property name="defaultViews">
  11. <list>
  12. <!-- JSON View -->
  13. <bean
  14. class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
  15. </bean>
  16. <!--  XML view -->
  17. <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
  18. <constructor-arg>
  19. <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
  20. <property name="classesToBeBound">
  21. <list>
  22. <value>com.test.Person</value>
  23. </list>
  24. </property>
  25. </bean>
  26. </constructor-arg>
  27. </bean>
  28. <!--  PDF view -->
  29. <bean class="com.test.PdfView">
  30. </bean>
  31. </list>
  32. </property>
  33. <property name="ignoreAcceptHeader" value="true" />
  34. 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了,真的十分方便呀

工作的时候用到spring返回xml view查到此文章亲测可用的更多相关文章

  1. spring 返回xml数据

    要将对象以xml数据形式返回:参考:https://blog.csdn.net/Pnoter/article/details/52218363 1:创建对象时应该填上xml注解,这样才能将对象转换为x ...

  2. spring mybatis 3.2调用mysql存储过程返回多结果集(完整、亲测、可用)

    最近,有个开发提了个需求,希望中间件支持调用mysql存储过程时支持多结果集返回,因为某些原因我们使用了不少的存储过程,很多复杂的逻辑目前来看交互非常的多,所以从当前的现状来说,这个需求还是蛮合理的. ...

  3. spring boot 日志文件配置(logback-spring.xml)亲测可用!

    问题描述:如何配置springboot项目,通过日志配置,使之输出自定义日志. 详细文章:https://blog.csdn.net/gebitan505/article/details/701421 ...

  4. app微信支付宝支付后台的插件模式+回调通过spring广播处理后续业务(已亲测可用)

    写在前面的话:每当我们做一个项目,基本上都会涉及到支付的业务,最常用的莫过于微信和支付宝的支付了,项目有bug,有问题,都不叫问题,可一旦钱出了问题,那就是大问题了,所以在支付业务上我们必须慎之又慎! ...

  5. maven pox.xml文件报错解决办法 亲测可以

    问题1 由于maven下载依赖包失败导致一些文件没完全下载下来,形成了lastUpdated结尾的文件存放在本地仓库中(我是默认地址:C:\Users\Administrator\.m2\reposi ...

  6. 1. Spring基于xml加载和读取properties文件配置

    在src目录下,新建test.properties配置文件,内容如下 name=root password=123456 logArchiveCron=0/5 * * * * ? 一种是使用sprin ...

  7. Spring 通过XML配置文件以及通过注解形式来AOP 来实现前置,环绕,异常通知,返回后通知,后通知

    本节主要内容: 一.Spring 通过XML配置文件形式来AOP 来实现前置,环绕,异常通知     1. Spring AOP  前置通知 XML配置使用案例     2. Spring AOP   ...

  8. Spring Boot 返回 XML 数据,一分钟搞定!

    Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击查看之前分享的 Spring Boot 返回 JSON 数据,一分钟搞定! ...

  9. Spring MVC 返回 xml json pdf 数据的配置方法

    <!-- Spring MVC 返回 xml 数据的配置方法 -->     <bean class="org.springframework.web.servlet.vi ...

随机推荐

  1. Compaction介绍

    Compaction介绍 Compaction是buffer->flush->merge的Log-Structured Merge-Tree模型的关键操作,主要起到如下几个作用: 1)合并 ...

  2. JavaScrip 原生多文件上传及预览 兼容多浏览器

    JavaScrip 原生多文件上传及预览 兼容多浏览器 html代码块 <div class="container"> <label>请选择一个图像文件:& ...

  3. myeclipse发布项目

    最好不要点击restart 虽然点击run,也会发布,但是最好先点击发布. 点击restart,可能会出现tomcat关不掉又启动不了.

  4. npm package管理

    每个项目都包含一个package.json文件用来管理项目依赖的包以及项目相关信息. 其中比较总要的就是dependencies和devDependencies两项,分别指定了项目运行所依赖的模块.项 ...

  5. 吐槽XE3中的BUG:无法调试32位的应用程序

    我想用的功能在XE5中有BUG, 无奈转移到XE3中测试,发现了XE3还有另外一个问题:无法DEBUG 32位的应用程序,这算什么事啊?有人说把项目属性中的link with dynamic RTL去 ...

  6. js动态拼接参数到请求的url上

    var queryConfig={ "page" : "index", "method" : 2, //1:按照方法A查看 2:按照方法B查 ...

  7. BestCoder Round #18(hdu5105)Math Problem(高中数学)

    最大值无非就是在两个端点或极值点处取得. 我注意讨论了a=0和b=0,却忽略了极值点可能不在L到R的范围内这一问题.被Hack了. #include<iostream> #include& ...

  8. pdp 的连接方法

    <?php $dsn = "mysql:host=127.0.0.1;dbname=blog_edu"; try{ $pdo = new PDO($dsn,'root','' ...

  9. Java 参数的和

    public class CommandParamter { public static void main(String[] args) { // TODO Auto-generated metho ...

  10. BZOJ4861 [Beijing2017]魔法咒语

    题意 Chandra 是一个魔法天才.从一岁时接受火之教会洗礼之后, Chandra 就显示出对火元素无与伦比的亲和力,轻而易举地学会种种晦涩难解的法术.这也多亏 Chandra 有着常人难以企及的语 ...