07点睛Spring MVC4.1-ContentNegotiatingViewResolver
转发地址:https://www.iteye.com/blog/wiselyman-2214965
7.1 ContentNegotiatingViewResolver
- ContentNegotiatingViewResolver支持在Spring MVC下输出不同的格式;
- ContentNegotiatingViewResolver是ViewResolver的一个实现;
- ContentNegotiatingViewResolver使用request的媒体类型,根据扩展名选择不同的view输出不同的格式;
- ContentNegotiatingViewResolver不是自己处理view,而是代理给不同的ViewResolver来处理不同的view;
- 本例演示根据扩展名获得不同的页面;
- jsp
- view:
WEB-INF/views/demoObj.jsp
- viewResolver:
UrlBasedViewResolver
或InternalResourceViewResolver
- view:
- pdf
- view:
PdfView
- viewResolver:
PdfViewResolver
- view:
- json
- view:
MappingJackson2JsonView
- viewResolver:
JsonViewResolver
- view:
- xml
- view:
MarshallingView
- viewResolver:
XmlViewResolver
- view:
- xls
- view:
XlsView
- viewResolver:
XlsViewResolver
- view:
7.2 示例
7.2.1 添加依赖
依赖
- json依赖
03点睛Spring MVC 4.1-REST
已添加 - xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring-framework.version}</version>
</dependency><dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>4.2.1</version>
</dependency>- xls
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10-beta2</version>
</dependency>- json依赖
7.2.2 定制view和viewResolve
7.2.2.1 pdf
7.2.2.1.1 view
package com.wisely.view; import java.awt.Color;
import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.view.document.AbstractPdfView; import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
import com.wisely.domain.DemoObj; public class PdfView extends AbstractPdfView { @Override
protected void buildPdfDocument(Map<String, Object> model,
Document document, PdfWriter writer, HttpServletRequest request,
HttpServletResponse response) throws Exception {
DemoObj demoObj = (DemoObj) model.get("demoObj"); PdfPTable table = new PdfPTable(2);
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE);
table.getDefaultCell().setBackgroundColor(Color.lightGray); table.addCell("ID");
table.addCell("NAME"); table.addCell(demoObj.getId().toString());
table.addCell(demoObj.getName()); document.add(table);
} }
7.2.2.1.2 viewResolver
package com.wisely.viewresolver; import java.util.Locale; import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver; import com.wisely.view.PdfView; public class PdfViewResolver implements ViewResolver{ @Override
public View resolveViewName(String viewName, Locale locale)
throws Exception {
return new PdfView();
} }
7.2.2.2 xls
7.2.2.2.1 view
package com.wisely.view; import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.springframework.web.servlet.view.document.AbstractExcelView; import com.wisely.domain.DemoObj; public class XlsView extends AbstractExcelView{ @Override
protected void buildExcelDocument(Map<String, Object> model,
HSSFWorkbook workbook, HttpServletRequest request,
HttpServletResponse response) throws Exception {
DemoObj demoObj = (DemoObj) model.get("demoObj"); Sheet sheet = workbook.createSheet("sheet1");
CellStyle style = workbook.createCellStyle();
style.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.index);
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
style.setAlignment(CellStyle.ALIGN_CENTER);
Row row = null;
Cell cell = null;
int rowCount = 0;
int colCount = 0; // 创建头部
row = sheet.createRow(rowCount++); cell = row.createCell(colCount++);
cell.setCellStyle(style);
cell.setCellValue("ID"); cell = row.createCell(colCount++);
cell.setCellStyle(style);
cell.setCellValue("NAME"); // 创建数据
row = sheet.createRow(rowCount++);
colCount = 0;
row.createCell(colCount++).setCellValue(demoObj.getId());
row.createCell(colCount++).setCellValue(demoObj.getName());
for (int i = 0; i < 3; i++)
sheet.autoSizeColumn(i, true); } }
7.2.2.2.2 viewResolver
package com.wisely.viewresolver; import java.util.Locale; import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver; import com.wisely.view.XlsView; public class XlsViewResolver implements ViewResolver{ @Override
public View resolveViewName(String viewName, Locale locale)
throws Exception {
return new XlsView();
} }
7.2.2.3 json
7.2.2.3.1 view
使用的是MappingJackson2JsonView
7.2.2.3.2 viewResolver
package com.wisely.viewresolver; import java.util.Locale; import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.json.MappingJackson2JsonView; public class JsonViewResolver implements ViewResolver{ @Override
public View resolveViewName(String viewName, Locale locale)
throws Exception {
MappingJackson2JsonView view = new MappingJackson2JsonView();
view.setPrettyPrint(true);
return view;
} }
7.2.2.4 xml
7.2.2.4.1 DemoBean的额外配置
package com.wisely.domain; import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "demo")
public class DemoObj {
private Long id;
private String name; public DemoObj() {
super();
} public DemoObj(Long id, String name) {
super();
this.id = id;
this.name = name;
} public Long getId() {
return id;
} @XmlElement
public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} @XmlElement
public void setName(String name) {
this.name = name;
} }
7.2.2.4.2 view
使用的是MarshallingView
7.2.2.4.3 viewResolver
package com.wisely.viewresolver; import java.util.Locale; import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.xml.MarshallingView; import com.wisely.domain.DemoObj; public class XmlViewResolver implements ViewResolver { @Override
public View resolveViewName(String viewName, Locale locale)
throws Exception {
MarshallingView view = new MarshallingView();
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(DemoObj.class);
marshaller.setPackagesToScan("com.wisely.domain");
view.setMarshaller(marshaller);
return view;
} }
7.2.2.5 jsp
7.2.2.5.1 view
WEB-INF/views/demoObj.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title> </head>
<body>
id/name <br/>
${demoObj.id}/${demoObj.name}
</body>
</html>
7.2.2.5.2 viewResolver
UrlBasedViewResolver
或InternalResourceViewResolver
7.2.3 配置resolver
package com.wisely; import java.util.ArrayList;
import java.util.List; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.accept.ContentNegotiationManager;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.view.UrlBasedViewResolver; import com.wisely.interceptors.DemoInteceptor;
import com.wisely.viewresolver.JsonViewResolver;
import com.wisely.viewresolver.PdfViewResolver;
import com.wisely.viewresolver.XlsViewResolver;
import com.wisely.viewresolver.XmlViewResolver; @Configuration
@ComponentScan("com.wisely")
@EnableWebMvc
public class DemoMVCConfig extends WebMvcConfigurerAdapter { //在此---jsp viewResolver
@Bean
public UrlBasedViewResolver viewResolver() {
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
} // 注册自定义拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(demoInteceptor());
} // 自定义拦截器
@Bean
public DemoInteceptor demoInteceptor() {
return new DemoInteceptor();
} // 静态资源映射
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/js/**").addResourceLocations("/js/");
} // 文件上传设置
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(1000000);
return multipartResolver;
} // 在此---配置ContentNegotiationManager,在无后缀名情况下默认为jsp view resolver
@Override
public void configureContentNegotiation(
ContentNegotiationConfigurer configurer) {
configurer.ignoreAcceptHeader(true).defaultContentType(
MediaType.TEXT_HTML);
} // 在此---配置ContentNegotiatingViewResolver,通过此代理到不同的viewResolover
@Bean
public ViewResolver contentNegotiatingViewResolver(
ContentNegotiationManager manager) { ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver();
resolver.setContentNegotiationManager(manager);
List<ViewResolver> resolvers = new ArrayList<ViewResolver>(); resolvers.add(xmlViewResolver());
resolvers.add(jsonViewResolver());
resolvers.add(viewResolver());// jsp view resolver
resolvers.add(pdfViewResolver());
resolvers.add(xlsViewResolver()); resolver.setViewResolvers(resolvers);
return resolver;
} //在此---xml viewResolver
@Bean
public ViewResolver xmlViewResolver() {
return new XmlViewResolver();
} //在此---json viewResolver
@Bean
public ViewResolver jsonViewResolver() {
return new JsonViewResolver();
}
//在此---pdf viewResolver
@Bean
public ViewResolver pdfViewResolver() {
return new PdfViewResolver();
}
//在此---excel viewResolver
@Bean
ViewResolver xlsViewResolver() {
return new XlsViewResolver();
} }
7.2.4 演示控制器
package com.wisely.web; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import com.wisely.domain.DemoObj; @Controller
public class ContentController {
@RequestMapping(value = "/getdemo",method = RequestMethod.GET)
public String getDemo(Model model){
DemoObj demoObj = new DemoObj(333l, "WYF");
model.addAttribute("demoObj",demoObj);
return "demoObj"; } }
7.2.5 结果
7.2.5.1 jsp
7.2.5.2 json
7.2.5.3 pdf
7.2.5.4 xml
7.2.5.5 xls
07点睛Spring MVC4.1-ContentNegotiatingViewResolver的更多相关文章
- 08点睛Spring MVC4.1-Spring MVC的配置(含自定义HttpMessageConverter)
8.1 配置 Spring MVC的配置是通过继承WebMvcConfigurerAdapter类并重载其方法实现的; 前几个教程已做了得配置包括 01点睛Spring MVC 4.1-搭建环境 配置 ...
- 09点睛Spring MVC4.1-异步请求处理(包含兼容浏览器的服务器端推送)
转发地址:https://www.iteye.com/blog/wiselyman-2215852 9.1 异步请求处理 Servlet 3开始支持异步请求处理 Spring MVC 3.2开始支持S ...
- 10点睛Spring MVC4.1-全局异常处理
10.1 全局异常处理 使用@ControllerAdvice注解来实现全局异常处理; 使用@ControllerAdvice的属性缩小处理范围 10.2 演示 演示控制器 package com.w ...
- Struts2、Spring MVC4 框架下的ajax统一异常处理
本文算是struts2 异常处理3板斧.spring mvc4:异常处理 后续篇章,普通页面出错后可以跳到统一的错误处理页面,但是ajax就不行了,ajax的本意就是不让当前页面发生跳转,仅局部刷新, ...
- spring mvc4:异常处理
前面学习过struts2的异常处理,今天来看下spring mvc4的异常处理: 一.Servlet配置文件修改 <bean id="exceptionResolver" c ...
- Spring Mvc4 新特性(一)
前言 Spring Framework的Web层,由spring-web,spring-webmvc,spring-websocket和spring-webmvc-portlet模块组成. 很多人刚学 ...
- 02点睛Spring MVC 4.1-@RequestMapping
转发地址:https://www.iteye.com/blog/wiselyman-2213907 2.1 @RequestMapping @RequestMapping是SpringMVC的核心注解 ...
- 07.深入浅出 Spring Boot - 数据访问之Mybatis(附代码下载)
MyBatis 在Spring Boot应用非常广,非常强大的一个半自动的ORM框架. 代码下载:https://github.com/Jackson0714/study-spring-boot.gi ...
- Spring MVC 之 ContentNegotiatingViewResolver
我们已经知道 对于 RequestMappingInfoHandlerMapping, 它在对带有后缀的http 请求进行匹配的时候,如果找不到精确的pattern, 那么就会 pattern+.* ...
随机推荐
- Oracle NVL 函数 nvl nvl2
Oracle中函数以前介绍的字符串处理,日期函数,数学函数,以及转换函数等等,还有一类函数是通用函数.主要有:NVL,NVL2,NULLIF,COALESCE,这几个函数用在各个类型上都可以. 下面简 ...
- Delphi赋
DELPHI者,经典开发工具.美奂美仑之开发环境也. 盖论DELPHI其身世,实为神界之神物,后借宝蓝公司之手,于1990年代,现于江湖. DELPHI一出江湖,码农爱之,企业爱之.一时间,风雨雷动, ...
- 洛谷 P1855 榨取kkksc03 题解
P1855 榨取kkksc03 题目描述 洛谷2的团队功能是其他任何oj和工具难以达到的.借助洛谷强大的服务器资源,任何学校都可以在洛谷上零成本的搭建oj并高效率的完成训练计划. 为什么说是搭建oj呢 ...
- XMind 8 pro for Mac(思维导图软件)附序列号和破解教程【亲测可用!!】
年后了,又到一年面试时,最近在用思维导图整理知识点,原本使用的是在线思维导图 ProcessOn,奈何免费版的个人文件数量只能有9 张,远远不能满足我的需要,所以还是使用一个本地版的吧,but依然不想 ...
- Pytest权威教程26-示例和自定义技巧
目录 示例和自定义技巧 返回: Pytest权威教程 示例和自定义技巧 这是一个(不断增长的)示例列表.如果你需要更多示例或有疑问,请联系我们.另请参阅包含许多示例代码段的 综合文档.此外,stack ...
- C 库函数 - strchr()
定义 char *strchr(const char *str, int c) 参数 str -- 要被检索的 C 字符串. c -- 在 str 中要搜索的字符 说明 该函数返回在字符串 str 中 ...
- Xshell远程连接服务器
Xshell远程连接服务器 打开xshell后找到左上角第一个“文件”点击,弹出来一个下拉框,选择“新建”点击(或者直接按下快捷键“Alt+n”). 点击“新建”之后就会出现下面这样一 ...
- 【Vue.js游戏机实战】- Vue.js实现大转盘抽奖总结
大家好!先上图看看本次案例的整体效果. 实现思路: Vue component实现大转盘组件,可以嵌套到任意要使用的页面. css3 transform控制大转盘抽奖过程的动画效果. 抽奖组件内使用钩 ...
- ubuntu之路——day9.2 Covariate shift问题和Batch Norm的解决方案
Batch Norm的意义:Covariate shift的问题 在传统的机器学习中,我们通常会认为source domain和target domain的分布是一致的,也就是说,训练数据和测试数据是 ...
- How to receive JSON as an MVC 5 action method parameter
How to receive JSON as an MVC 5 action method parameter 解答1 Unfortunately, Dictionary has problems ...