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

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

SpringMVC可以通过URL扩展名请求参数来控制服务端的资源输出类型。



maven 依赖


  1. <!--配置jsp jstl的支持-->
  2.        <dependency>
  3.            <groupId>javax.servlet</groupId>
  4.            <artifactId>jstl</artifactId>
  5.        </dependency>
  6.        <dependency>
  7.            <groupId>taglibs</groupId>
  8.            <artifactId>standard</artifactId>
  9.        </dependency>
  10.        <!-- Needed for XML View(with JAXB2) -->
  11.        <dependency>
  12.            <groupId>org.springframework</groupId>
  13.            <artifactId>spring-oxm</artifactId>
  14.            <version>${spring.version}</version>
  15.        </dependency>
  16.        <!-- Needed for JSON View -->
  17.        <dependency>
  18.            <groupId>com.fasterxml.jackson.core</groupId>
  19.            <artifactId>jackson-databind</artifactId>
  20.            <version>2.6.1</version>
  21.        </dependency>
  22.        <dependency>
  23.            <groupId>com.fasterxml.jackson.core</groupId>
  24.            <artifactId>jackson-annotations</artifactId>
  25.            <version>2.6.1</version>
  26.        </dependency>
  27.        <!-- Needed for PDF View -->
  28.        <dependency>
  29.            <groupId>com.lowagie</groupId>
  30.            <artifactId>itext</artifactId>
  31.            <version>2.1.7</version>
  32.            <scope>compile</scope>
  33.        </dependency>
  34.        <!-- Needed for XLS View -->
  35.        <dependency>
  36.            <groupId>org.apache.poi</groupId>
  37.            <artifactId>poi</artifactId>
  38.            <version>3.14</version>
  39.        </dependency>

视图解析器


  1. package com.newcapec.config;
  2. import com.newcapec.util.ExcelViewResolver;
  3. import com.newcapec.util.PdfViewResolver;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.ComponentScan;
  6. import org.springframework.context.annotation.Configuration;
  7. import org.springframework.http.MediaType;
  8. import org.springframework.web.accept.ContentNegotiationManager;
  9. import org.springframework.web.servlet.View;
  10. import org.springframework.web.servlet.ViewResolver;
  11. import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
  12. import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  13. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  14. import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
  15. import org.springframework.web.servlet.view.InternalResourceViewResolver;
  16. import org.springframework.web.servlet.view.JstlView;
  17. import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
  18. import org.springframework.web.servlet.view.xml.MarshallingView;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. /**
  22. * @Title: 视图解析器--配置类
  23. * @ClassName: com.newcapec.cloudpay.controller.util.SpringMvcConfig.java
  24. * @Description:
  25. *
  26. * @Copyright2016-2018 新开普 - Powered By 研发中心
  27. * @author: 王延飞
  28. * @date:  2018-01-1416:52
  29. * @version V1.0
  30. */
  31. @Configuration
  32. @EnableWebMvc
  33. @ComponentScan(basePackages = "com.newcapec.cloudpay.controller")
  34. publicclassSpringMvcConfigextendsWebMvcConfigurerAdapter {
  35.    /*
  36.     * Configure ContentNegotiationManager
  37.     */
  38.    @Override
  39.    publicvoidconfigureContentNegotiation(ContentNegotiationConfigurer configurer) {
  40.        configurer
  41.                // 设置默认的MIME类型,如果没有指定拓展名或请求参数,则使用此默认MIME类型解析视图
  42.                .defaultContentType(MediaType.TEXT_HTML)
  43.                // 是否不适用请求头确定MIME类型
  44.                .ignoreAcceptHeader(true)
  45.                /*使用拓展名类型,不注释以下三行将使用参数(type)的方法访问*/
  46.                // 是否根据路径拓展名确定MIME类型
  47.                .favorPathExtension(false)
  48.                // 是否使用参数来确定MIME类型
  49.                .favorParameter(false)
  50.                // 上一个属性配置为true,我们指定type请求参数判断MIME类型
  51.                .parameterName("type");
  52.    }
  53.    /*
  54.     * Configure ContentNegotiatingViewResolver
  55.     */
  56.    @Bean
  57.    public ViewResolver contentNegotiatingViewResolver(ContentNegotiationManager manager) {
  58.        ContentNegotiatingViewResolverresolver=newContentNegotiatingViewResolver();
  59.        // 设置优先级
  60.        resolver.setOrder(1);
  61.        // 添加ContentNegotiationManager
  62.        resolver.setContentNegotiationManager(manager);
  63.        /*设置默认的候选视图,如果有合适的MIME类型,将优先从以下选择视图,找不到再在整个Spring容器里寻找已注册的合适视图 */
  64.        List<View> views = newArrayList<View>();
  65.        views.add(newMappingJackson2JsonView());
  66.        views.add(newMarshallingView());
  67.        resolver.setDefaultViews(views);
  68.        /*自定义视图解析器,或者对已有的视图进行个性化配置*/
  69.        // Define all possible view resolvers
  70.        List<ViewResolver> resolvers = newArrayList<ViewResolver>();
  71.        /*resolvers.add(jaxb2MarshallingXmlViewResolver());
  72.        resolvers.add(jsonViewResolver());*/
  73.        resolvers.add(jspViewResolver());
  74.        resolvers.add(pdfViewResolver());
  75.        resolvers.add(excelViewResolver());
  76.        resolver.setViewResolvers(resolvers);
  77.        return resolver;
  78.    }
  79.    /*
  80.     * Configure View resolver to provide XML output Uses JAXB2 marshaller to
  81.     * marshall/unmarshall POJO's (with JAXB annotations) to XML
  82.     */
  83.   /* @Bean
  84.    public ViewResolver jaxb2MarshallingXmlViewResolver() {
  85.        Jaxb2Marshallermarshaller=newJaxb2Marshaller();
  86.        marshaller.setClassesToBeBound(Pizza.class);
  87.        returnnewJaxb2MarshallingXmlViewResolver(marshaller);
  88.    }*/
  89.    /*
  90.     * Configure View resolver to provide JSON output using JACKSON library to
  91.     * convert object in JSON format.
  92.     */
  93.    /*  @Bean
  94.    public ViewResolver jsonViewResolver() {
  95.        returnnewJsonViewResolver();
  96.    }*/
  97.    /*
  98.     * Configure View resolver to provide PDF output using lowagie pdf library to
  99.     * generate PDF output for an object content
  100.     */
  101.    @Bean
  102.    public ViewResolver pdfViewResolver() {
  103.        returnnewPdfViewResolver();
  104.    }
  105.    /*
  106.     * Configure View resolver to provide XLS output using Apache POI library to
  107.     * generate XLS output for an object content
  108.     */
  109.    @Bean
  110.    public ViewResolver excelViewResolver() {
  111.        returnnewExcelViewResolver();
  112.    }
  113.    /*
  114.     * Configure View resolver to provide HTML output This is the default format
  115.     * in absence of any type suffix.
  116.     */
  117.    @Bean
  118.    public ViewResolver jspViewResolver() {
  119.        InternalResourceViewResolverviewResolver=newInternalResourceViewResolver();
  120.        viewResolver.setViewClass(JstlView.class);
  121.        viewResolver.setPrefix("/WEB-INF/pages/");
  122.        viewResolver.setSuffix(".jsp");
  123.        return viewResolver;
  124.    }
  125. }


自定义Excel解析器


  1. package com.newcapec.config;
  2. import org.springframework.web.servlet.View;
  3. import org.springframework.web.servlet.ViewResolver;
  4. import java.util.Locale;
  5. publicclassExcelViewResolverimplementsViewResolver {
  6. @Override
  7. public View resolveViewName(String viewName, Locale locale)throws Exception {
  8. ExcelViewview=newExcelView();
  9. return view;
  10.      }
  11. }
  12. package com.newcapec.config;
  13. import org.apache.poi.hssf.usermodel.HSSFRow;
  14. import org.apache.poi.hssf.usermodel.HSSFSheet;
  15. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  16. import org.springframework.web.servlet.view.document.AbstractExcelView;
  17. import javax.servlet.http.HttpServletRequest;
  18. import javax.servlet.http.HttpServletResponse;
  19. import java.util.Map;
  20. publicclassExcelViewextendsAbstractExcelView {
  21. @Override
  22. protectedvoidbuildExcelDocument(Map<String, Object> model,
  23. HSSFWorkbook workbook, HttpServletRequest request,
  24. HttpServletResponse response) throws Exception {
  25. RspBaseVOrspBaseVO= (RspBaseVO) model.get("RspBaseVO");
  26. HSSFSheetsheet= workbook.createSheet("返回结果");//创建一页
  27. HSSFRowheader= sheet.createRow(0);//创建第一行
  28. header.createCell(0).setCellValue("返回码");
  29. header.createCell(1).setCellValue("返回信息");
  30. HSSFRowrow= sheet.createRow(1);
  31. row.createCell(0).setCellValue(rspBaseVO.getCode());
  32. row.createCell(1).setCellValue(rspBaseVO.getMsg());
  33. }
  34. }


自定义PDF解析器


  1. package com.newcapec.config;
  2. import org.springframework.web.servlet.View;
  3. import org.springframework.web.servlet.ViewResolver;
  4. import java.util.Locale;
  5. publicclassPdfViewResolverimplementsViewResolver {
  6. @Override
  7. public View resolveViewName(String viewName, Locale locale)throws Exception {
  8. PdfViewview=newPdfView();
  9. return view;
  10.      }
  11. }


  1. package com.newcapec.config;
  2. import com.lowagie.text.Document;
  3. import com.lowagie.text.Element;
  4. import com.lowagie.text.pdf.PdfPTable;
  5. import com.lowagie.text.pdf.PdfWriter;
  6. import org.springframework.web.servlet.view.document.AbstractPdfView;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.awt.*;
  10. import java.util.Map;
  11. publicclassPdfViewextendsAbstractPdfView {
  12. @Override
  13. protectedvoidbuildPdfDocument(Map<String, Object> model,
  14. Document document, PdfWriter writer, HttpServletRequest request,
  15. HttpServletResponse response) throws Exception {
  16. RspBaseVOrspBaseVO= (RspBaseVO) model.get("RspBaseVO");
  17. PdfPTabletable=newPdfPTable(2);
  18. table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
  19. table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE);
  20. table.getDefaultCell().setBackgroundColor(Color.lightGray);
  21. table.addCell("返回码");
  22. table.addCell("返回信息");
  23. table.addCell(rspBaseVO.getCode());
  24. table.addCell(rspBaseVO.getMsg());
  25. document.add(table);
  26. }
  27. }


实体

  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>


目录
相关文章
|
14天前
|
人工智能 Java API
Java也能快速搭建AI应用?一文带你玩转Spring AI可落地性
Java语言凭借其成熟的生态与解决方案,特别是通过 Spring AI 框架,正迅速成为 AI 应用开发的新选择。本文将探讨如何利用 Spring AI Alibaba 构建在线聊天 AI 应用,并实现对其性能的全面可观测性。
|
4月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
144 2
|
9天前
|
人工智能 Java API
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
|
2月前
|
存储 NoSQL Java
使用Java和Spring Data构建数据访问层
本文介绍了如何使用 Java 和 Spring Data 构建数据访问层的完整过程。通过创建实体类、存储库接口、服务类和控制器类,实现了对数据库的基本操作。这种方法不仅简化了数据访问层的开发,还提高了代码的可维护性和可读性。通过合理使用 Spring Data 提供的功能,可以大幅提升开发效率。
76 21
|
1月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
66 7
|
5天前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
|
11天前
|
人工智能 Java API
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
Java 也能快速搭建 AI 应用?一文带你玩转 Spring AI 可观测性
|
2月前
|
Java Spring
Java Spring Boot监听事件和处理事件
通过上述步骤,我们可以在Java Spring Boot应用中实现事件的发布和监听。事件驱动模型可以帮助我们实现组件间的松耦合,提升系统的可维护性和可扩展性。无论是处理业务逻辑还是系统事件,Spring Boot的事件机制都提供了强大的支持和灵活性。希望本文能为您的开发工作提供实用的指导和帮助。
115 15
|
2月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
112 7
|
3月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
121 7
Spring Boot 入门:简化 Java Web 开发的强大工具

热门文章

最新文章