首页 > 其他分享 >Spring 3 mvc中返回pdf,json,xml等不同的view

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

时间:2023-04-20 13:07:53浏览次数:38  
标签:xml name Person Spring person json public view


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

先是一个简单的pojo
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; 

 } 


 }



注意使用@XmlRootElement标签之。

然后是controller:

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; 

 }




然后分别假设要导出为PDF的view,引入著名的itext了;
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())); 


 }




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

然后是web.xml:

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>




最核心的配置来了:

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" /> 


 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了,真的十分方便呀

标签:xml,name,Person,Spring,person,json,public,view
From: https://blog.51cto.com/u_16080829/6209465

相关文章

  • Spring MVC过滤器-ShallowEtagHeaderFilter
    评:ShallowEtagHeaderFilter是spring提供的支持ETag的一个过滤器,所谓ETag是指被请求变量的实体值,是一个可以与Web资源关联的记号,而Web资源可以是一个Web页,也可以是JSON或XML文档,服务器单独负责判断记号是什么及其含义,并在HTTP响应头中将其传送到客户端,以下是服务器端返回的格式:[......
  • 【Spring Cloud】网关
     ServerWebExchange中获取TokenprivateStringgetToken(ServerWebExchangeexchange){StringauthToken=exchange.getRequest().getHeaders().getFirst("Token");if(StrUtil.isBlank(authToken)){MultiValueMap<String,String>q......
  • 在web.xml下配置error-page
    评:解决问题:捕获页面错误并反到指定页面处理。在web.xml中加入如下配置:<!--404页面不存在错误--><error-page><error-code>404</error-code><location>/error.jsp</location></error-page><!--500服务器内部错误--><error-page><er......
  • windows server 的日志手动筛选xml如何学习编写
    如何编写WindowsServer的日志筛选器,你需要先了解以下概念:1、WindowsEventLog:WindowsEventLog是WindowsServer操作系统提供的一种记录系统事件的机制,它可以记录操作系统、应用程序、安全、系统和其他类型的事件。2、EventViewer:EventViewer是Windows操作系统提供......
  • (IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案
    转:(IDEA)spring项目导入本地jar包方法和项目打包时找不到引入本地jar包的问题解决方案 【Maven】理解maven的6大内置属性   ......
  • 在eclipse中创建springMVC项目
    1.创建一个Javaweb项目 2.输入项目名称,下一步 3.下一步,勾选创建web.xml选项 4.在lib文件夹中添加jar包 5.在WEB-INF文件夹下添加springmvc框架配置文件,起名为springmvc-servlet.xml 代码如下:<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.s......
  • 记录一次使用 表达式引擎 自定义注解 还有 sql union all 实现对数据库数据提取、重组
    这样编写减少了前后端很多没必要的遍历,以及if判断并最大限度提高了代码的可变通性额外需要学习的是ORM框架下,如何接收多表(各表结构不同)操作后,sql返回的新结构的临时表问题表达式引擎用到的依赖<dependency><groupId>org.apache.commons</groupId>......
  • Spring Aop的学习:Spring Aop的简单入门
    1.什么是AOPAOP(AspectOrientedProgramming):面向切面编程,是OOP(面向对象编程)的一个延续,其和OOP一样,也是一种编程思想。不过AOP是一种横向开发模式。 2.AOP的作用及应用场景作用AOP的主要作用就是减少代码量,提高代码的可重用性,有利于未来的可操作性与可维护性。主要操......
  • 前端跨域解决方案——JSONP
    JSONP(JSONwithPadding)是一种跨域请求的解决方案,它允许在不受同源策略限制的情况下从一个域中向另一个域中请求数据。JSONP的基本原理是利用<script>标签的src属性没有跨域限制的特性来实现跨域数据访问。在使用JSONP时,需要在客户端创建一个script标签,将需要访问的资......
  • SpringBoot静态文件映射问题
    如果遇到这种情况,检查静态文件(js/css/img)是不是在默认的static路径下,在查看application配置中的static-path-pattern:是否和前端映射路径完全相同,要是不相同则会造成访问不到......