提個問題:前面我們發現,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對象
所以,如果沒有以上的配置,我們想將前端的請求參數轉換為對象,則會以失敗告終。
HttpMessageConverter是個接口,其實現類有很多,主要是一個JSON的轉換實現類
當我們給控制器添加@ResponseBody時,SpringMVC會將這個響應轉換為JSON類型。
而背後就是採用了MappingJackson2HttpMessageConverter進行轉換處理。
閱讀更多 互聯網十年老兵 的文章