生活随笔
收集整理的這篇文章主要介紹了
Spring 梳理 - ContentNegotiatingViewResolver
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
ContentNegotiatingViewResolver,這個(gè)視圖解析器允許你用同樣的內(nèi)容數(shù)據(jù)來呈現(xiàn)不同的view。它支持如下面描述的三種方式:1)使用擴(kuò)展名
http://localhost:8080/employees/nego/Jack.xml? 返回結(jié)果為XML
http://localhost:8080/employees/nego/Jack.json 返回結(jié)果為JSON
http://localhost:8080/employees/nego/Jack? 使用默認(rèn)view呈現(xiàn),比如JSP
2) HTTP Request Header中的Accept,Accept 分別是 text/jsp,??text/pdf,??text/xml,??text/json,? 無Accept 請求頭
3) 使用參數(shù)
http://localhost:8080/employees/nego/Jack?format=xml? 返回結(jié)果為XML
http://localhost:8080/employees/nego/Jack?format=json 返回結(jié)果為JSON
?ContentNegotiatingViewResolver 可以一個(gè)@RequestMapping,返回多個(gè)view。配置 <property name="favorPathExtension" value="true"></property>?是否啟用擴(kuò)展名支持,默認(rèn)是true
<property name="favorParameter" value="false"></property>?是否啟用參數(shù)支持,默認(rèn)是true
<property name="ignoreAcceptHeader" value="true"></property>?是否忽略掉accept header,默認(rèn)就是false
?
spring 給我們提供了?ContentNegotiationManagerFactoryBean,這是推薦的方式。 配置上類似。 <bean id="cnManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"><property name="ignoreAcceptHeader" value="true"/><property name="favorPathExtension" value="true"/><property name="defaultContentType" value="text/html"/><property name="favorParameter" value="true"/><property name="mediaTypes"><map><entry key="xml" value="application/xml"/><entry key="json" value="text/plain"/><entry key="xls" value="application/vnd.ms-excel"/></map></property></bean> ?
<bean id="viewResolver"class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"><property name="contentNegotiationManager" ref="cnManager"/><property name="viewResolvers"><!-- 針對freemarker的視圖配置 --> <list><bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/><property name="viewNames" value=".ftl"/><property name="contentType" value="text/html; charset=utf-8"/><property name="cache" value="true" /><property name="prefix" value="" /><property name="suffix" value="" /><property name="order" value="2"/></bean><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/view/jsp/"></property><!-- 配置頁面路徑 --><property name="suffix" value=".jsp"></property><!-- 文件以value值結(jié)尾 --></bean></list></property><property name="defaultViews"><list><bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"><!-- <property name="extractValueFromSingleKeyModel" value="true"/> --><property name="prettyPrint" value="true"/><property name="contentType" value="text/plain"/></bean><bean class="org.springframework.web.servlet.view.xml.MarshallingView"><constructor-arg ref="jaxb2Marshaller"></constructor-arg></bean><bean class="com.wonders.stpt.bid.controller.JXLExcelView"/></list></property></bean> ?
defaultViews的作用:在defaultViews里注冊的視圖會(huì)在ContentNegotiationViewResolver中注冊自己支持的內(nèi)容類型
由ContentNegotiationManagerFactoryBean的mediaTypes決定響應(yīng)的內(nèi)容類型當(dāng)contentNegotiationManager決定好響應(yīng)的內(nèi)容類型后,ContentNegotiationViewResolver就會(huì)根據(jù)該內(nèi)容類型選擇一個(gè)兼容的View進(jìn)行渲染輸出一旦有View對請求內(nèi)容匹配,就直接渲染輸出,不會(huì)進(jìn)行ViewResolver的查詢。當(dāng)注冊的內(nèi)容類型都不兼容時(shí),會(huì)查詢viewResolver中的ViewResolver是否支持該請求,如果ViewResolver表示支持該請求,那么就由該ViewResolver負(fù)責(zé)視圖渲染,如果ViewResolver表示不支持該請求,則查詢下一個(gè)ViewResolver,直至所有的ViewResolver查詢完畢。 默認(rèn)是支持path 后綴拓展方式, 也支持accept 請求頭,但不支持 format 參數(shù)的 ?
?
轉(zhuǎn)載于:https://www.cnblogs.com/jiangtao1218/p/10205166.html
總結(jié)
以上是生活随笔為你收集整理的Spring 梳理 - ContentNegotiatingViewResolver的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。