ContentNegotiatingViewResolver这个解析器是做什么用的? RESTful服务中很重要的一个特性即是同一资源,多种表述我们使用ContentNegotiatingViewResolver就可以做到,这个视图解析器允许你用同样的内容数据来呈现不同的view
如下面描述的三种方式:
方式1 使用扩展名 http://www./user.xml 呈现xml文件 http://www./user.json 呈现json格式 http://www./user 使用默认view呈现,比如jsp等 ----------------------------------------------------------------------------------------------------- 方式2 使用http request header的Accept GET /user HTTP/1.1 Accept:application/xml
GET /user HTTP/1.1 Accept:application/json
…. -----------------------------------------------------------------------------------------------------
方式3 使用参数 http://www./user?format=xml http://www./user?format=json
这三种方式各自的优缺点这里就不再介绍了 如何使用ContentNegotiatingViewResolver? 假设我们有这么一个目标: /user/{userid}.json 用于返回一个描述User的JSON /user/{userid} 用于返回一个展示User的JSP页面 /user/{userid}.xml 用于返回一个展示User的XML文件
配置文件说明 (具体例子下篇文章放上) 我们知道有accept header,扩展名以及参数这三种方式,配置文件中
这里是解析器的执行顺序,如果有多个的话(前面多次解释过) <property name="order" value="1"></property>
--------------------------------------------------------------------------------------------------------------
如果所有的mediaType都没匹配上,就会使用defaultContentType <property name="defaultContentType" value="text/html" />
这里是是否启用扩展名支持,默认就是true 例如 /user/{userid}.json <property name="favorPathExtension" value="true"></property> 这里是是否启用参数支持,默认就是true 例如 /user/{userid}?format=json <property name="favorParameter" value="false"></property> 这里是否忽略掉accept header,默认就是false 例如 GET /user HTTP/1.1 Accept:application/json <property name="ignoreAcceptHeader" value="true"></property>
我们的例子是采用.json , .xml结尾的,所以关掉两个
-------------------------------------------------------------------------------------------------------------- 这里是扩展名到mimeType的映射, 例如 /user/{userid}.json 中的 .json 就会映射到 application/json <property name="mediaTypes"> <map> <entry key="json" value="application/json" /> <entry key="xml" value="application/xml" /> </map> </property> 注: ContentNegotiatingViewResolver是根据客户提交的MimeType(如
text/html,application/xml)来跟服务端的一组viewResover的MimeType相比较,如果符合,即返回
viewResover的数据.
ContentNegotiatingViewResolver的处理流程(左上角入口)
|
|