spring ContentNegotiationManagerFactoryBean 内容协商
来源:互联网 发布:面对网络舆论你怎么看 编辑:程序博客网 时间:2024/05/22 12:13
一.什么是内容协商
简单点说,就是同一资源,可以有多种表现形式,比如xml、json等,具体使用哪种表现形式,是可以协商的。
这是RESTfull的一个重要特性,Spring Web MVC也支持这个功能。
1.Spring MVC REST是如何决定采用何种方式(视图)来展示内容呢?
一:根据Http请求的header中的Accept属性的值来判读,比如:
Accept: application/xml 将返回xml格式数据
Accept: application/json 将返回json格式数据
优点:是这种方式是理想的标准方式
缺点:是由于浏览器的差异,导致发送的Accept Header头可能会不一样,从而导致服务器不知要返回什么格式的数据
二:根据扩展名来判断,比如:
/mvc/test.xml 将返回xml格式数据
/mvc/test.json 将返回json格式数据
/mvc/test.html 将返回html格式数据
缺点:丧失了同一URL的多种展现方式。在实际环境中使用还是较多的,因为这种方式更符合程序员的习惯
三:根据参数来判断
/mvc/test?format=xml 将返回xml数据
/mvc/test?format=json 将返回json数据
缺点:需要额外的传递format参数,URL变得冗余繁琐,缺少了REST的简洁风范
2.使用内容协商的功能,如果不使用第三种方式的话,3.2的版本可以什么都不用配置,默认就能支持前面两种。下面还是看看怎么配置,示例如下:
需要在spring的配置文件中做配置,示例如下:
-
- <bean id= "contentNegotiationManager" class= "org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
-
- <property name= "favorPathExtension" value= "true" />
-
- <property name= "favorParameter" value= "true" />
- <property name= "parameterName" value= "format"/>
-
- <property name= "ignoreAcceptHeader" value= "false"/>
-
- <property name= "mediaTypes">
- <value>
- json=application/json
- xml=application/xml
- html=text/html
- </value>
- </property>
-
-
-
-
-
-
-
-
- <property name= "defaultContentType" value= "text/html" />
- </bean>
视图定义:
- <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
- <property name="order" value="0"/>
- <property name="contentNegotiationManager" ref="contentNegotiationManager"/>
- <property name="viewResolvers">
- <list>
-
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="prefix" value="/WEB-INF/page/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
-
- </list>
- </property>
- <property name="defaultViews">
- <list>
- <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
- </bean>
-
- <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
- <property name="marshaller">
- <bean class="org.springframework.oxm.castor.CastorMarshaller">
- <property name="validating" value="false"></property>
- </bean>
- </property>
- </bean>
- </list>
- </property>
- </bean>
在mvc:annotation-driven里面配置使用内容协商- <mvc:annotation-driven
- conversion-service= "conversionService"
- content-negotiation-manager= "contentNegotiationManager”/>
...
阅读全文
0 0
- spring ContentNegotiationManagerFactoryBean 内容协商
- spring ContentNegotiationManagerFactoryBean 内容协商
- spring ContentNegotiationManagerFactoryBean 内容协商 2017-07-31 14:25 68人阅读 评论(0) 收藏 举报 一.什么是内容协商 简单点说,
- Spring MVC REST内容协商
- 使用Spring MVC的内容协商
- 内容协商
- [金步国]Apache内容协商
- ajax中的内容协商
- 17.1 内容协商技术
- spring REST中的内容协商(同一资源,多种展现:xml,json,html)
- spring REST中的内容协商(同一资源,多种展现:xml,json,html)
- Spring 3.x MVC 入门3 -- 使用内容协商来实现多视图
- ContentNegotiatingViewResolver spring REST中的内容协商(同一资源,多种展现:xml,json,html)
- ContentNegotiatingViewResolver spring REST中的内容协商(同一资源,多种展现:xml,json,html)
- Spring Web MVC框架(九) XML和JSON视图与内容协商
- Spring MVC ContentNegotiation内容协商机制(一个请求路径返回多种数据格式)源码解析
- apache内容协商的配置
- 内容协商 (Content Negotiation)
- 高精度数的四则运算+N!
- vue.js使用
- OpenCV3中StereoBM函数的用法
- 集成科大讯飞语音听写功能
- kubernetes1.8.4安装指南 -- 2. ssh免密登录
- spring ContentNegotiationManagerFactoryBean 内容协商
- xamarin学习笔记B05(ios的UIScrollView)
- 在WebStorm里配置watcher实现编辑less文件时自动生成.css文件
- 程序4
- placeholder
- 去除android系统截屏接口
- iOS 中tableView 多选时怎么更改cell前的选中框样式
- 建筑师创建了一个可以抵御地震的可折叠房屋
- 寻梦环游记身后的皮克斯,是卢卡斯和乔布斯的梦幻成果