SpringMVC用Map接收請求參數分析


 

 

第一種情況,什么也不設置,無參數傳遞

注解為 @Controller  @RequestMapping

 

可以看到傳遞的為SpringMVC的BindingAwareModelMap類型,SpringMVC中的隱含模型就是這個類型,其作用域等價於 request 域,當添加Model、ModelMap參數時,SpringMVC實際傳入的就是這個隱含模型;向這個隱含模型種設置值后,在返回的頁面中就能通過request域取值。

 

第二種情況,加個參數試試  =>  .../testmap?test1=2342

結果類型還是一樣,且參數不會被傳入,當然使用request肯定能取出來。

 

 

第三種情況,給Map參數添加@RequestParam注解

  1、Get請求 => http://localhost:8080/ssm/v2/testmap?test1=234234

  成功傳入了參數,注意這個Map類型為LinkedHashMap,而不是隱含模型了

 

 

  再添加個Model參數看看,隱含模型中依然沒有值

  所以添加@RequestParam注解后,SpringMVC會將 Get 請求中封裝進對應的參數中,如果參數是Map就封裝稱LinkedHashMap而不再傳入隱含模型

 

 

 

  2、Post請求, 再測試測試Post請求

  與Get的結果一致:參數無@RequestParam注解時,Map接收隱含模型;添加@RequestParam注解時,Map接收LinkedHashMap;隱含模型中無值。

 

 

 

第四種情況,給Map參數添加@RequestBody注解,且請求方式為Post

出乎意料的也成功傳入了,與@RequestParam注解結果類似,也是LinkedHashMap

 

 

復雜點的Json數據也能解析接收成功

 

 

 

 

總結

SpringMVC處理請求用Map類型接收參數時,如果參數無注解,則會傳入BindingAwareModelMap類型,等價於Model、ModelMap參數;

參數添加@RequestParam注解時,會將參數包裝稱LinkedHashMap對象,參數的key為Map的key,參數值為Map的key,支持Get、Post方法(應該支持Put、Delete,沒有測,倆方法與Post類似);

添加@RequestBody注解時,接收Json類型數據,也會包裝成LinkedHashMap對象,該注解不支持Get請求,Get請求沒有請求體不能傳Json。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM