SpringMvc自動裝箱及GET請求引數原理解析
在我的概念裡邊,GET請求需要加上註解@RequestParam,然後它的引數型別只能是 基本資料型別 或者 基本資料型別的包裝類,比如:@RequestParam String name(預設是必傳的),也可以不加@RequestParam 註解,其實就相當於@RequestParam(required = false)
但是引數型別竟然是自定義物件,物件類裡有不同的引數和get/set方法,而且沒有使用@RequestParam 註解,那麼同樣也能實現GET請求
比如一個請求方法是:public String login(User user) ,User.java類裡有name 和password 兩個引數和get/set方法
那麼請求http://localhost:8080/login?name=admin&password=123456是完全沒問題的
自動裝箱理解
對Java自動裝箱、拆箱的理解是:裝箱就是自動將基本資料型別轉換為包裝器型別;拆箱就是自動將包裝器型別轉換為基本資料型別。
對於springmvc來說,感覺它的自動裝箱,是將多個一般型別的引數轉換成一個物件,並賦值到物件裡的變數
那麼這樣的請求引數如何限制是否必傳呢?這裡可沒有(required = true),那就需要使用@Valid註解了
自動裝箱的缺點
1、自動裝箱最直接的缺點就是效率低,不解釋
2、我們知道url請求會放到RequestHeader 裡,這個應該是有長度限制的,那麼太長了肯定不合適。如果是POST請求的話,會放到RequestBody裡面去,就不會有RequestHeader 過長的問題了
3、如果物件裡放的是List 型別的引數,那麼這個應該如何在url 裡進行GET請求呢?我問老大,他說要避免這種情形,使用JSON格式
POST請求的自動裝箱
POST請求的引數,一般都加上註解@RequestBody,但是上例中的public String login(User user) 方法即使使用POST請求,依然是可以執行的
網上搜了下麼springmvc在post請求時使用與不使用@RequestBody註解的區別?
不使用@RequestBody註解時,可以接收Content-Type為application/x-www-form-urlencoded型別的請求所提交的資料,資料格式:aaa=111bbb=222。form表單提交以及jQuery的.post()方法所傳送的請求就是這種型別。
使用@RequestBody註解時,用於接收Content-Type為application/json型別的請求,資料型別是JSON:{"aaa":"111","bbb":"222"}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。