日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring 梳理 - ContentNegotiatingViewResolver

發布時間:2025/7/14 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring 梳理 - ContentNegotiatingViewResolver 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 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,Accept 分別是 text/jsp,??text/pdf,??text/xml,??text/json,? 無Accept 請求頭

    3) 使用參數
    http://localhost:8080/employees/nego/Jack?format=xml? 返回結果為XML
    http://localhost:8080/employees/nego/Jack?format=json 返回結果為JSON

  • ?ContentNegotiatingViewResolver 可以一個@RequestMapping,返回多個view。
  • 配置
  • <property name="favorPathExtension" value="true"></property>?是否啟用擴展名支持,默認是true

    <property name="favorParameter" value="false"></property>?是否啟用參數支持,默認是true

    <property name="ignoreAcceptHeader" value="true"></property>?是否忽略掉accept header,默認就是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值結尾 --></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里注冊的視圖會在ContentNegotiationViewResolver中注冊自己支持的內容類型

  • ContentNegotiationManagerFactoryBeanmediaTypes決定響應的內容類型
  • 當contentNegotiationManager決定好響應的內容類型后,ContentNegotiationViewResolver就會根據該內容類型選擇一個兼容的View進行渲染輸出
  • 一旦有View對請求內容匹配,就直接渲染輸出,不會進行ViewResolver的查詢。
  • 當注冊的內容類型都不兼容時,會查詢viewResolver中的ViewResolver是否支持該請求,如果ViewResolver表示支持該請求,那么就由該ViewResolver負責視圖渲染,如果ViewResolver表示不支持該請求,則查詢下一個ViewResolver,直至所有的ViewResolver查詢完畢。
  • 默認是支持path 后綴拓展方式, 也支持accept 請求頭,但不支持 format 參數的

    ?

    ?

  • 轉載于:https://www.cnblogs.com/jiangtao1218/p/10205166.html

    總結

    以上是生活随笔為你收集整理的Spring 梳理 - ContentNegotiatingViewResolver的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。