天天看點

spring-web源碼解析之ContentNegotiationManager

基于4.1.7.RELEASE

此類實作了兩個接口,一個是 ContentNegotiationStrategy ,一個是 MediaTypeFileExtensionResolver ,由此它就可以完成兩種功能

1 根據request中的内容,解析出MediaType的List清單。

2 根據MediaType,解析出對應的url字尾名。

該類隻有含ContentNegotiationStrategy參數和無參數的構造函數,在前者,其會解析參數是否也實作了MediaTypeFileExtensionResolver接口,這個接口前面講過,是負責将MediaType解析出url字尾的接口類,如果實作了,那麼會将其注冊到Set類型私有變量fileExtensionResolvers中去。

另一種形式為

功能都是一樣,隻是參數不同而已。

另一種構造函數是無參數的構造函數,這裡會注冊一個HeaderContentNegoaiationStrategy類到contentNegotiationStrategies清單,這個類之前也講過是根據accept來解析MediaType的。

那麼注冊出來的清單怎麼用呢?看如下方法。

這裡讓所有MediaTypeFileExtensionResolver去解析mediaType,然後将解析出來的字尾名集中傳回。

或者另一種形式

直接擷取所有的字尾。

總結:該類通過内置的内容協商政策和擴充名解析器,将request中的mediaType解析出來,并找到對應的字尾名,可以認為本來有2個作用

1 通過request解析出對應的mediaType

2 擷取全部或者mediaType對應的字尾名

繼續閱讀