SpringMVC:多视图[JSP,JSON,Excel,XML]混合输出__XML配置方式

简介: SpringMVC:多视图[JSP,JSON,Excel,XML]混合输出__XML配置方式



maven 依赖

  1. <!--XML视图-->
  2. <dependency>
  3. <groupId>com.fasterxml.jackson.core</groupId>
  4. <artifactId>jackson-databind</artifactId>
  5. <version>2.6.1</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework</groupId>
  9. <artifactId>spring-oxm</artifactId>
  10. <version>${spring.version}</version>
  11. </dependency>
  12. <!--XML视图(xstream)-->
  13. <!--<dependency>
  14.    <groupId>com.thoughtworks.xstream</groupId>
  15.    <artifactId>xstream</artifactId>
  16.    <version>1.4.10</version>
  17. </dependency>
  18. <dependency>
  19.    <groupId>xpp3</groupId>
  20.    <artifactId>xpp3_min</artifactId>
  21.    <version>1.1.4c</version>
  22. </dependency>
  23. <dependency>
  24.    <groupId>xmlpull</groupId>
  25.    <artifactId>xmlpull</artifactId>
  26.    <version>1.1.3.1</version>
  27. </dependency>-->
  28. <!--excel视图-->
  29. <dependency>
  30.    <groupId>org.apache.poi</groupId>
  31.    <artifactId>poi</artifactId>
  32.    <version>3.14</version>
  33. </dependency>


web.xml配置


  1. <!-- Spring MVC配置【Restful】开始 -->
  2.    <servlet>
  3.        <servlet-name>SpringMVC-Rest</servlet-name>
  4.        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  5.        <init-param>
  6.            <param-name>contextConfigLocation</param-name>
  7.            <param-value>classpath:spring/applicationContext-springMVC.xml</param-value>
  8.        </init-param>
  9.        <load-on-startup>1</load-on-startup>
  10.    </servlet>
  11.    <servlet-mapping>
  12.        <servlet-name>SpringMVC-Rest</servlet-name>
  13.        <url-pattern>/</url-pattern>
  14.    </servlet-mapping>
  15.    <!--Spring MVC配置【Restful】结束-->


视图解析器


  1. <!-- ContentNegotiatingViewResolver -->
  2.    <!-- 根据确定出的不同MIME名,使用不同视图解析器解析视图 -->
  3.    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
  4.        <!-- 设置优先级 -->
  5.        <property name="order" value="1"/>
  6.        <!-- 设置默认的MIME类型,如果没有指定拓展名或请求参数,则使用此默认MIME类型解析视图 -->
  7.        <property name="defaultContentType" value="text/html" />
  8.        <!-- 是否不适用请求头确定MIME类型 -->
  9.        <property name="ignoreAcceptHeader" value="true"/>
  10.        <!--使用拓展名类型,不注释以下三行将使用参数(type)的方法访问-->
  11.       <!-- 是否根据路径拓展名确定MIME类型 -->
  12.       <!-- <property name="favorPathExtension" value="false" />-->
  13.        <!-- 是否使用参数来确定MIME类型 -->
  14.       <!-- <property name="favorParameter" value="false"/>-->
  15.        <!-- 上一个属性配置为true,我们指定type请求参数判断MIME类型 -->
  16.        <!--<property name="parameterName" value="type" />-->
  17.        
  18.        <!-- 根据请求参数或拓展名映射到相应的MIME类型 -->
  19.        <property name="mediaTypes">
  20.            <map>
  21.                <entry key="html" value="text/html" />
  22.                <entry key="xml" value="application/xml" />
  23.                <entry key="json" value="application/json" />
  24.                <entry key="excel" value="application/vnd.ms-excel"></entry>
  25.            </map>
  26.        </property>
  27.        <!-- 设置默认的候选视图,如果有合适的MIME类型,将优先从以下选择视图,找不到再在整个Spring容器里寻找已注册的合适视图 -->
  28.        <property name="defaultViews">
  29.            <list>
  30.                <!-- JSON View -->
  31.                <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
  32.                <!-- JAXB XML View -->
  33.                <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
  34.                    <constructor-arg>
  35.                        <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
  36.                            <property name="classesToBeBound">
  37.                                <list>
  38.                                    <value>com.newcapec.cloudpay.service.base.RspBaseVO</value>
  39.                                </list>
  40.                            </property>
  41.                        </bean>
  42.                    </constructor-arg>
  43.                </bean>
  44.                <!-- Excel View -->
  45.                <bean class="com.newcapec.cloudpay.controller.util.CodeExcelView"></bean>
  46.            </list>
  47.        </property>
  48.    </bean>
  49.    <!-- View Resolver for JSPs -->
  50.    <bean id="viewResolver"
  51.          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  52.        <property name="requestContextAttribute" value="rc"/>
  53.        <property name="viewClass"
  54.                  value="org.springframework.web.servlet.view.JstlView"/>
  55.        <property name="prefix" value="/WEB-INF/pages/"/>
  56.        <property name="suffix" value=".jsp"/>
  57.    </bean>
  58.    <!-- 资源映射 -->
  59.    <!-- <mvc:resources location="/WEB-INF/css/" mapping="/css/**"/> -->
  60.    <!-- <mvc:resources location="/js/" mapping="/js/**" /> -->



自定义Excel解析器

  1. import com.newcapec.cloudpay.service.base.RspBaseVO;
  2. import org.apache.poi.hssf.usermodel.HSSFRow;
  3. import org.apache.poi.hssf.usermodel.HSSFSheet;
  4. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  5. import org.springframework.web.servlet.view.document.AbstractExcelView;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.util.Map;
  9. /**
  10. * @Title: 自定义返回结果-Excel视图
  11. * @ClassName: com.newcapec.cloudpay.controller.util.CodeExcelView.java
  12. * @Description:
  13. *
  14. * @Copyright2016-2017 - Powered By 研发中心
  15. * @author: 王延飞
  16. * @date:  2018-01-129:19
  17. * @version V1.0
  18. */
  19. publicclassCodeExcelViewextendsAbstractExcelView {
  20.    @Override
  21.    protectedvoidbuildExcelDocument(Map<String, Object> model,
  22.                                      HSSFWorkbook workbook, HttpServletRequest request,
  23.                                      HttpServletResponse response) throws Exception {
  24.        RspBaseVOrspBaseVO= (RspBaseVO) model.get("RspBaseVO");
  25.        HSSFSheetsheet= workbook.createSheet("返回结果");//创建一页
  26.        HSSFRowheader= sheet.createRow(0);//创建第一行
  27.        header.createCell(0).setCellValue("返回码");
  28.        header.createCell(1).setCellValue("返回信息");
  29.        HSSFRowrow= sheet.createRow(1);
  30.        row.createCell(0).setCellValue(rspBaseVO.getCode());
  31.        row.createCell(1).setCellValue(rspBaseVO.getMsg());
  32.    }
  33. }


实体

  1. import javax.xml.bind.annotation.XmlRootElement;
  2. /**
  3. * @Title: 返回响应值--基类
  4. * @ClassName:RspBaseVO.java
  5. * @Description:
  6. *
  7. * @Copyright2016-2017 - Powered By 研发中心
  8. * @author: 王延飞
  9. * @date:2018112日 上午07:43:41
  10. * @version V1.0
  11. */
  12. @XmlRootElement
  13. publicclassRspBaseVO {
  14. private String code; // 返回码
  15. private String msg; // 返回信息
  16. // private String data; // 业务参数
  17. public String getCode() {
  18. return code;
  19. }
  20. publicvoidsetCode(String code) {
  21. this.code = code;
  22. }
  23. public String getMsg() {
  24. return msg;
  25. }
  26. publicvoidsetMsg(String msg) {
  27. this.msg = msg;
  28. }
  29. @Override
  30. public String toString() {
  31. return"RspBaseVO [code=" + code + ", msg=" + msg + "]";
  32. }
  33. }


controller

  1. /***
  2. * .json(?type=json) -- 返回JSON
  3.     * .excel(?type=excel) -- 返回Excel
  4.     * .xml(?type=xml) -- 返回XML
  5. *  为空-- 返回JSP
  6. */
  7. @RequestMapping(value="/multiview/{code}/{msg}", method=RequestMethod.GET)
  8. public String multiViewTest(@PathVariable String code,@PathVariable String msg, Model model) {
  9.        RspBaseVOrspBaseVO=newRspBaseVO();
  10.        rspBaseVO.setCode(code);
  11.        rspBaseVO.setMsg(msg);
  12.        model.addAttribute("RspBaseVO",rspBaseVO);
  13. return"/com/test/codeTest";
  14. }


jsp页面

  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  2. <html>
  3. <head>
  4.    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5.    <title>多视图混合输出-状态码</title>
  6. </head>
  7. <body>
  8. code : ${RspBaseVO.code} <br/>
  9. msg : ${RspBaseVO.msg}
  10. </body>
  11. </html>


目录
相关文章
|
2月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
44 1
|
3月前
|
XML JSON 前端开发
【Web前端揭秘】XML与JSON:数据界的双雄对决,你的选择将如何改写Web世界的未来?
【8月更文挑战第26天】本文深入探讨了XML和JSON这两种广泛使用的数据交换格式在Web前端开发中的应用。XML采用自定义标签描述数据结构,适用于复杂层次数据的表示,而JSON则以键值对形式呈现数据,更为轻量且易解析。通过对两种格式的示例代码、结构特点及应用场景的分析,本文旨在帮助读者更好地理解它们的差异,并根据实际需求选择最合适的数据交换格式。
58 1
|
2月前
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
175 61
C# 中的 XML 与 JSON 数据处理
|
29天前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
37 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
2月前
|
XML Java 应用服务中间件
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
通过一个HelloWorld实例,介绍了SpringMVC的基本概念、执行流程,并详细讲解了如何创建和配置第一个SpringMVC项目(基于XML)。
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
|
3月前
|
前端开发
SpringMVC入门到实战------六、SpringMVC的视图。ThymeleafView、转发视图、重定向视图、视图控制器的使用详解
这篇文章详细介绍了SpringMVC中的视图类型,包括ThymeleafView、转发视图、重定向视图和视图控制器的使用,以及如何通过源码查看确定使用的视图渲染器类型。
SpringMVC入门到实战------六、SpringMVC的视图。ThymeleafView、转发视图、重定向视图、视图控制器的使用详解
|
3月前
|
前端开发 Java Spring
SpringMVC种通过追踪源码查看是哪种类型的视图渲染器(一般流程方法)
这篇文章通过示例代码展示了如何在Spring MVC中编写和注册拦截器,以及如何在拦截器的不同阶段添加业务逻辑。
SpringMVC种通过追踪源码查看是哪种类型的视图渲染器(一般流程方法)
|
3月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
83 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
3月前
|
Java Spring 容器
彻底改变你的编程人生!揭秘 Spring 框架依赖注入的神奇魔力,让你的代码瞬间焕然一新!
【8月更文挑战第31天】本文介绍 Spring 框架中的依赖注入(DI),一种降低代码耦合度的设计模式。通过 Spring 的 DI 容器,开发者可专注业务逻辑而非依赖管理。文中详细解释了 DI 的基本概念及其实现方式,如构造器注入、字段注入与 setter 方法注入,并提供示例说明如何在实际项目中应用这些技术。通过 Spring 的 @Configuration 和 @Bean 注解,可轻松定义与管理应用中的组件及其依赖关系,实现更简洁、易维护的代码结构。
51 0
|
4月前
|
XML JSON 缓存
优化Java中XML和JSON序列化
优化Java中XML和JSON序列化