SpringMVC之ContentNegotiatingViewResolver实现根据请求资源名选择视图
2017-02-27 14:31
671 查看
使用ContentNegotiatingViewResolver,这个视图解析器允许你用同样的内容数据来呈现不同的view。
它支持如下面描述的三种方式:
1)使用扩展名
http://localhost:8080/employees/nego/Jack.xml 返回结果为XML
http://localhost:8080/employees/nego/Jack.json 返回结果为JSON http://localhost:8080/employees/nego/Jack 使用默认view呈现,比如JSP
2) HTTP Request Header中的Accept
3) 使用参数
http://localhost:8080/employees/nego/Jack?format=xml 返回结果为XML
http://localhost:8080/employees/nego/Jack?format=json 返回结果为JSON
我们使用方式1来实现。
1)添加Controller方法
[java] view
plain copy
/**
* Jack.xml -- 返回XML
* Jack.json -- 返回JSON
* Jack -- 返回JSP:employee.jsp
*/
@RequestMapping(value="/nego/{name}", method=RequestMethod.GET)
public String getEmployeeNegotiating(@PathVariable String name, ModelMap model) {
model.addAttribute("emp", new EmployeeX(name, 16000));
return "employee";
}
employee.jsp如下
[java] view
plain copy
<%@ 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>Employee</title>
</head>
<body>
Name : ${emp.name} <br/>
Salary : ${emp.salary}
</body>
</html>
2)在spring-mvc.xml中添加如下配置
[html] view
plain copy
<!-- ViewResolver -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="favorParameter" value="false" />
<property name="ignoreAcceptHeader" value="true" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</map>
</property>
<property name="defaultViews">
<list>
<!-- JSON View -->
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
<!-- JAXB XML View -->
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>learning.webapp.model.EmployeeX</value>
</list>
</property>
</bean>
</constructor-arg>
</bean>
</list>
</property>
</bean>
<!-- If no extension matched, use JSP view -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="2" />
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/views/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
有几个重要的参数:
<property name="favorPathExtension" value="true"></property> 是否启用扩展名支持,默认是true
<property name="favorParameter" value="false"></property> 是否启用参数支持,默认是true
<property name="ignoreAcceptHeader" value="true"></property> 是否忽略掉accept header,默认就是false
我们使用扩展名,所以关掉后面两个。
3)在POM添加添加下面2个依赖
[html] view
plain copy
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
打开浏览器,访问如下URL:
它支持如下面描述的三种方式:
1)使用扩展名
http://localhost:8080/employees/nego/Jack.xml 返回结果为XML
http://localhost:8080/employees/nego/Jack.json 返回结果为JSON http://localhost:8080/employees/nego/Jack 使用默认view呈现,比如JSP
2) HTTP Request Header中的Accept
3) 使用参数
http://localhost:8080/employees/nego/Jack?format=xml 返回结果为XML
http://localhost:8080/employees/nego/Jack?format=json 返回结果为JSON
我们使用方式1来实现。
1)添加Controller方法
[java] view
plain copy
/**
* Jack.xml -- 返回XML
* Jack.json -- 返回JSON
* Jack -- 返回JSP:employee.jsp
*/
@RequestMapping(value="/nego/{name}", method=RequestMethod.GET)
public String getEmployeeNegotiating(@PathVariable String name, ModelMap model) {
model.addAttribute("emp", new EmployeeX(name, 16000));
return "employee";
}
employee.jsp如下
[java] view
plain copy
<%@ 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>Employee</title>
</head>
<body>
Name : ${emp.name} <br/>
Salary : ${emp.salary}
</body>
</html>
2)在spring-mvc.xml中添加如下配置
[html] view
plain copy
<!-- ViewResolver -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="favorParameter" value="false" />
<property name="ignoreAcceptHeader" value="true" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</map>
</property>
<property name="defaultViews">
<list>
<!-- JSON View -->
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
<!-- JAXB XML View -->
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>learning.webapp.model.EmployeeX</value>
</list>
</property>
</bean>
</constructor-arg>
</bean>
</list>
</property>
</bean>
<!-- If no extension matched, use JSP view -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="2" />
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/views/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
有几个重要的参数:
<property name="favorPathExtension" value="true"></property> 是否启用扩展名支持,默认是true
<property name="favorParameter" value="false"></property> 是否启用参数支持,默认是true
<property name="ignoreAcceptHeader" value="true"></property> 是否忽略掉accept header,默认就是false
我们使用扩展名,所以关掉后面两个。
3)在POM添加添加下面2个依赖
[html] view
plain copy
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
打开浏览器,访问如下URL:
相关文章推荐
- SpringMVC ContentNegotiatingViewResolver -- 根据请求资源名选择视图
- SpringMVC ContentNegotiatingViewResolver -- 根据请求资源名选择视图
- SpringMVC ContentNegotiatingViewResolver -- 根据请求资源名选择视图
- spring mvc ContentNegotiatingViewResolver 根据路径后缀,选择不同视图
- spring mvc4.2 ContentNegotiatingViewResolver 根据路径后缀,选择不同视图
- Spring mvc ContentNegotiatingViewResolver 根据路径后缀,选择不同视图
- Springmvc同一资源不同描述配置-contentnegotiatingviewresolver
- SpringMVC 使用ContentNegotiatingViewResolver整合多种视图解析器
- Spring mvc 视图解析器 ContentNegotiatingViewResolver 源码分析
- Spring mvc 视图解析器 ContentNegotiatingViewResolver 源码分析
- Spring mvc 视图解析器 ContentNegotiatingViewResolver 源码分析
- 混合视图技术--ContentNegotiatingViewResolver
- SpringMVC大坑一枚:ContentNegotiatingViewResolver可能不利于SEO
- 实现Spring 4 MVC ContentNegotiatingViewResolver example
- SpringMVC之ContentNegotiatingViewResolver详解
- SpringMVC大坑一枚:ContentNegotiatingViewResolver可能不利于SEO
- 混合多种视图技术:ContentNegotiatingViewResolver
- Spring MVC-ContentNegotiatingViewResolver 多视图返回
- ContentNegotiatingViewResolver - 内容协商视图解析器
- SpringMVC大坑一枚:ContentNegotiatingViewResolver可能不利于SEO