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>


目录
相关文章
|
2月前
|
安全 前端开发 Java
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择。依赖注入使对象管理交由Spring容器处理,实现低耦合高内聚;AOP则分离横切关注点如事务管理,增强代码模块化。Spring还提供MVC、Data、Security等模块满足多样需求,并通过Spring Boot简化配置与部署,加速微服务架构构建。掌握这些核心概念与工具,开发者能更从容应对挑战,打造卓越应用。
36 1
|
14天前
|
XML Java 应用服务中间件
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
通过一个HelloWorld实例,介绍了SpringMVC的基本概念、执行流程,并详细讲解了如何创建和配置第一个SpringMVC项目(基于XML)。
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
|
27天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
27天前
|
缓存 Java 数据库
【Java面试题汇总】Spring篇(2023版)
IoC、DI、aop、事务、为什么不建议@Transactional、事务传播级别、@Autowired和@Resource注解的区别、BeanFactory和FactoryBean的区别、Bean的作用域,以及默认的作用域、Bean的生命周期、循环依赖、三级缓存、
【Java面试题汇总】Spring篇(2023版)
|
17天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
745 9
|
3天前
|
JSON Java Maven
实现Java Spring Boot FCM推送教程
详细介绍实现Java Spring Boot FCM推送教程
17 0
|
28天前
|
Java 数据库连接 API
【Java笔记+踩坑】Spring Data JPA
从常用注解、实体类和各层编写方法入手,详细介绍JPA框架在增删改查等方面的基本用法,以及填充用户名日期、分页查询等高级用法。
【Java笔记+踩坑】Spring Data JPA
|
28天前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
2月前
|
人工智能 自然语言处理 Java
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
文章介绍了Spring AI,这是Spring团队开发的新组件,旨在为Java开发者提供易于集成的人工智能API,包括机器学习、自然语言处理和图像识别等功能,并通过实际代码示例展示了如何快速集成和使用这些AI技术。
Spring AI,Spring团队开发的新组件,Java工程师快来一起体验吧
|
2月前
|
缓存 Java 应用服务中间件
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)
这篇文章详细介绍了在SpringMVC中创建JSP页面的全过程,包括项目的创建、配置、Tomcat的设置,以及如何实现页面跳转和配置模板解析器,最后还对比了JSP和HTML模板解析的差异。
SpringMVC入门到实战------七、SpringMVC创建JSP页面的详细过程+配置模板+实现页面跳转+配置Tomcat。JSP和HTML配置模板的差异对比(二)