前提
在日常使用SpringMVC進行開發的時候,有可能遇到前端各種類型的請求參數,這里做一次相對全面的總結。SpringMVC中處理控制器參數的接口是HandlerMethodArgumentResolver,此接口有眾多子類,分別處理不同(注解類型)的參數,下面只列舉幾個子類:
實際上,一般在解析一個控制器的請求參數的時候,用到的是HandlerMethodArgumentResolverComposite,里面裝載了所有啟用的HandlerMethodArgumentResolver子類。而HandlerMethodArgumentResolver子類在解析參數的時候使用到HttpMessageConverter(實際上也是一個列表,進行遍歷匹配解析)子類進行匹配解析,常見的如MappingJackson2HttpMessageConverter。而HandlerMethodArgumentResolver子類到底依賴什么HttpMessageConverter實例實際上是由請求頭中的ContentType(在SpringMVC中統一命名為MediaType,見org.springframework.http.MediaType)決定的,因此我們在處理控制器的請求參數之前必須要明確外部請求的ContentType到底是什么。上面的邏輯可以直接看源碼AbstractMessageConverterMethodArgumentResolver#readWithMessageConverters,思路是比較清晰的。在@RequestMapping注解中,produces和consumes就是和請求或者響應的ContentType相關的:
另外提一點,SpringMVC中默認使用Jackson作為JSON的工具包,如果不是完全理解透整套源碼的運作,一般不是十分建議修改默認使用的MappingJackson2HttpMessageConverter(例如有些人喜歡使用FastJson,實現HttpMessageConverter引入FastJson做轉換器)。
SpringMVC請求參數接收
其實一般的表單或者JSON數據的請求都是相對簡單的,一些復雜的處理主要包括URL路徑參數、文件上傳、數組或者列表類型數據等。另外,關于參數類型中存在日期類型屬性(例如java.util.Date、java.sql.Date、java.time.LocalDate、java.time.LocalDateTime),解析的時候一般需要自定義實現的邏輯實現String->日期類型的轉換。其實道理很簡單,日期相關的類型對于每個國家、每個時區甚至每個使用者來說認知都不一定相同。在演示一些例子主要用到下面的模特類:
@Data public class User { private String name; private Integer age; private List<Contact> contacts; } @Data public class Contact { private String name; private String phone; }
網站欄目:SpringMVC請求參數接收的全面總結教程-創新互聯
鏈接分享:http://vcdvsql.cn/article46/cscceg.html
成都網站建設公司_創新互聯,為您提供企業網站制作、建站公司、營銷型網站建設、微信公眾號、網站改版、商城網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯