008-SpringMVC-HandlerAdapter適配

提個問題:前面我們發現,SpringMVC非常輕鬆就可以獲取到前端傳遞各種參數,這背後是怎麼做到的?


這裡面關鍵就是SpringMVC的消息轉換機制,核心要點就是我們之前畫的流程圖中的HandlerAdapter

具體的結構圖大家可以參考

處理器的作用就是在控制器的基礎上加上一層處理,主要是在Http請求到達控制器之前對各類消息進行處理。

步驟如下:

1,Http請求到達DispatcherServlet

2,DispatcherServlet-->HandlerMapping-->HandlerAdapter(執行處理器)

3,HandlerAdpater獲取Http的請求信息,然後將Http的請求信息轉換為控制器的各種不同類型參數,這樣我們的控制器就可以獲取到對應參數了。

4,具體是怎麼轉換的?其實還要經歷以下步驟

4.1 先通過Http的消息轉換器(HttpMessageConverter)對消息進行轉換,簡單轉換為java類型,比如String類型;

4.2 如果想進一步轉換為對象或其他類型,則需要藉助後續的轉換器和格式化器

所以,這個時候來解釋下的作用了

(也可以通過註解@EnableWebMvc的方式來配置)

當加入這項配置後,SpringIOC容器會自動定義一個關於轉換器和格式化器的類實例

FormattingConversionServiceFactoryBean,這個工廠最主要的產品就是DefaultFormattingConversionService對象

008-SpringMVC-HandlerAdapter適配

008-SpringMVC-HandlerAdapter適配

所以,如果沒有以上的配置,我們想將前端的請求參數轉換為對象,則會以失敗告終。

HttpMessageConverter是個接口,其實現類有很多,主要是一個JSON的轉換實現類

008-SpringMVC-HandlerAdapter適配

當我們給控制器添加@ResponseBody時,SpringMVC會將這個響應轉換為JSON類型。

而背後就是採用了MappingJackson2HttpMessageConverter進行轉換處理。

008-SpringMVC-HandlerAdapter適配


分享到:


相關文章: