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


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. * @Copyright 2016-2018 新开普 - Powered By 研发中心
  27. * @author: 王延飞
  28. * @date: 2018-01-14 16:52
  29. * @version V1.0
  30. */
  31. @Configuration
  32. @EnableWebMvc
  33. @ComponentScan(basePackages = "com.newcapec.cloudpay.controller")
  34. public class SpringMvcConfig extends WebMvcConfigurerAdapter {
  35. /*
  36. * Configure ContentNegotiationManager
  37. */
  38. @Override
  39. public void configureContentNegotiation(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. ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();
  59. // 设置优先级
  60. resolver.setOrder(1);
  61. // 添加ContentNegotiationManager
  62. resolver.setContentNegotiationManager(manager);
  63. /*设置默认的候选视图,如果有合适的MIME类型,将优先从以下选择视图,找不到再在整个Spring容器里寻找已注册的合适视图 */
  64. List<View> views = new ArrayList<View>();
  65. views.add(new MappingJackson2JsonView());
  66. views.add(new MarshallingView());
  67. resolver.setDefaultViews(views);
  68. /*自定义视图解析器,或者对已有的视图进行个性化配置*/
  69. // Define all possible view resolvers
  70. List<ViewResolver> resolvers = new ArrayList<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. Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
  86. marshaller.setClassesToBeBound(Pizza.class);
  87. return new Jaxb2MarshallingXmlViewResolver(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. return new JsonViewResolver();
  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. return new PdfViewResolver();
  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. return new ExcelViewResolver();
  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. InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  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. public class ExcelViewResolver implements ViewResolver {
  6. @Override
  7. public View resolveViewName(String viewName, Locale locale) throws Exception {
  8. ExcelView view = new ExcelView();
  9. return view;
  10. }
  11. }
       
       
  1. package com.newcapec.config;
  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. public class ExcelView extends AbstractExcelView {
  10. @Override
  11. protected void buildExcelDocument(Map<String, Object> model,
  12. HSSFWorkbook workbook, HttpServletRequest request,
  13. HttpServletResponse response) throws Exception {
  14. RspBaseVO rspBaseVO = (RspBaseVO) model.get("RspBaseVO");
  15. HSSFSheet sheet = workbook.createSheet("返回结果");//创建一页
  16. HSSFRow header = sheet.createRow(0);//创建第一行
  17. header.createCell(0).setCellValue("返回码");
  18. header.createCell(1).setCellValue("返回信息");
  19. HSSFRow row = sheet.createRow(1);
  20. row.createCell(0).setCellValue(rspBaseVO.getCode());
  21. row.createCell(1).setCellValue(rspBaseVO.getMsg());
  22. }
  23. }

自定义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. public class PdfViewResolver implements ViewResolver {
  6. @Override
  7. public View resolveViewName(String viewName, Locale locale) throws Exception {
  8. PdfView view = new PdfView();
  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. public class PdfView extends AbstractPdfView {
  12. @Override
  13. protected void buildPdfDocument(Map<String, Object> model,
  14. Document document, PdfWriter writer, HttpServletRequest request,
  15. HttpServletResponse response) throws Exception {
  16. RspBaseVO rspBaseVO = (RspBaseVO) model.get("RspBaseVO");
  17. PdfPTable table = new PdfPTable(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. * @Copyright 2016-2017 - Powered By 研发中心
  8. * @author: 王延飞
  9. * @date:2018年1月12日 上午07:43:41
  10. * @version V1.0
  11. */
  12. @XmlRootElement
  13. public class RspBaseVO {
  14. private String code; // 返回码
  15. private String msg; // 返回信息
  16. // private String data; // 业务参数
  17. public String getCode() {
  18. return code;
  19. }
  20. public void setCode(String code) {
  21. this.code = code;
  22. }
  23. public String getMsg() {
  24. return msg;
  25. }
  26. public void setMsg(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. RspBaseVO rspBaseVO = new RspBaseVO();
  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>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,这是一个比较常见的问题,我来为您解答。 首先,需要在 pom.xml 文件中添加以下依赖: ```xml <dependencies> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.9.RELEASE</version> </dependency> <!-- Tomcat embedded container--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <version>2.3.4.RELEASE</version> <scope>provided</scope> </dependency> <!-- Jackson for JSON support --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.2</version> </dependency> </dependencies> ``` 接下来,需要创建一个 Java 配置类,用于替代传统的 XML 配置文件。在这个类中,需要使用 @EnableWebMvc 注解启用 Spring MVC,并配置一些基本的设置。以下是一个示例配置类: ```java @Configuration @EnableWebMvc @ComponentScan(basePackages = "com.example.controller") public class AppConfig implements WebMvcConfigurer { @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("/static/"); } @Override public void configureViewResolvers(ViewResolverRegistry registry) { registry.jsp("/WEB-INF/views/", ".jsp"); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoggingInterceptor()); } @Override public void addFormatters(FormatterRegistry registry) { // Add custom formatters here } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { // Add custom argument resolvers here } @Override public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) { // Add custom return value handlers here } } ``` 在这个配置类中,我们定义了一些常见的配置选项,例如映射静态资源、视图解析器、拦截器等等。您可以根据自己的需要进行相应的修改。 最后,需要编写一个控制器类,用于处理 HTTP 请求和响应。以下是一个示例控制器类: ```java @Controller public class HomeController { @RequestMapping("/") public String home(Model model) { model.addAttribute("message", "Hello, World!"); return "home"; } } ``` 在这个控制器类中,我们使用 @Controller 注解标记该类,同时使用 @RequestMapping 注解标记处理请求的方法。在这个示例中,我们定义了一个处理根目录请求的方法,它会向模型中添加一条消息,并返回一个名为 "home" 的视图名称。 最后,您可以使用 Maven 的命令打包项目,并使用以下命令启动项目: ``` mvn clean package java -jar target/myapp-1.0.0.jar ``` 这样,您就可以使用无 XML 配置的 Spring MVC 应用程序进行开发了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琦彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值