1. 程式人生 > >springmvc 參數轉換

springmvc 參數轉換

參數轉換

題外:

spring3.1後對註解使用的handlermapping和adapter是RequestMappingHandlerMapping 和 處理器適配器RequestMappingHandlerAdapter,之前是DefaultAnnotationHandlerMapping和處理器適配器AnnotationMethodHandlerAdapter

題內:

之前通過url找到對應的類的處理方法,然後需要將報文中的參數轉換為處理方法需要的參數,具體實現是靠adapter中的解析器實現的。adapter對應參數的解析,也是先註冊解析器,然後判斷那個解析器適合就用哪個,這些解析器可以自己構建,系統也提供一下默認的,通過getDefaultArgumentResolvers獲得。每個解析器的實現類都會實現supportsParameter方法,用於判斷是否支持處理方法中的參數。比如參數上[email protected]

/* */,則RequestResponseBodyMethodProcessor這個解析器會被選中,這個解析器沒有用databinder去做參數類型的轉換(報文中的參數類型轉換為處理方法中的參數類型),而是使用HttpMessageConverter作為轉換器,用戶可以註冊各種實現了httpmesageConverter接口的類用於類型轉換,[email protected]y用於復雜類型的轉換,[email protected],他會選擇RequestParamMethodArgumentResolver,這個解析器的轉換器是databinder(Conversionservice),一般用於簡單類型的轉換,比如form,它一般是先從request.getParameter獲取對應參數的字符串值,然後通過轉換器進行轉換。

轉換器的選擇是根據報文content-type和目標類型來匹配合適的轉換器()

springmvc 參數轉換