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>


目录
相关文章
|
10天前
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
28 2
|
21天前
|
安全 Java 数据安全/隐私保护
如何配置 Java 安全管理器来避免访问控制异常
配置Java安全管理器以防止访问控制异常,需在启动JVM时通过 `-Djava.security.manager` 参数启用,并设置安全策略文件,定义权限规则,限制代码执行操作,确保应用安全。
|
24天前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
110 1
|
1月前
|
消息中间件 分布式计算 Java
大数据-73 Kafka 高级特性 稳定性-事务 相关配置 事务操作Java 幂等性 仅一次发送
大数据-73 Kafka 高级特性 稳定性-事务 相关配置 事务操作Java 幂等性 仅一次发送
27 2
|
1月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
68 4
|
1月前
|
Java Shell Maven
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
94 4
|
1月前
|
消息中间件 Java 大数据
大数据-56 Kafka SpringBoot与Kafka 基础简单配置和使用 Java代码 POM文件
大数据-56 Kafka SpringBoot与Kafka 基础简单配置和使用 Java代码 POM文件
62 2
|
1月前
|
XML JavaScript Java
java与XML文件的读写
java与XML文件的读写
23 3
|
2月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
|
1月前
|
负载均衡 算法 Java
java中nginx负载均衡配置
java中nginx负载均衡配置
36 0
下一篇
无影云桌面