Springmvc參數獲取
分析參數獲取,首先要了解http請求時,參數如何存放,有幾種方式,否則沒有所謂的獲取
GET比較簡單,沒有body,所以獲取url上的參數(key=value)。
POST不僅可以在url上放,參數還可以放在body
body根據contentType分為以下幾種情況
application/x-www-form-urlencoded
POST http://127.0.0.1:8888/demo HTTP/1.1 Content-Type: application/x-www-form-urlencoded;charset=utf-8 title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3
multipart/form-data(一般為傳輸文件時候用)
body數據以boundary分隔,如
POST http://127.0.0.1 HTTP/1.1 Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="text" title ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name="file"; filename="chrome.png" Content-Type: image/png PNG ... content of chrome.png ... ------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
text/plain application/json text/html等等(統稱為raw)
{"value":"money"}
我們平時寫接口一般用application/json
表單默認是application/x-www-form-urlencoded,也可以設置為multipart/form-data
那麽,如何用springmvc來獲取參數
GET請求獲取參數有如下方法
方法1 request.getPrameter("xxx")
方法2 @RequestParam String xxx
註意:
request.getPrameter("xxx") == request.getPrameterValues("xxx")[0]
@RequestParam String xxx == request.getPrameterValues("xxx") 循環並逗號分開
一般一個參數名對應一個值,request.getPrameter("xxx")獲取的值和@RequestParam String xxx是一樣的。當有多個值就有所區別
eg:http://127.0.0.1:8888/demo?xxx=a&xxx=b
request.getPrameter("xxx") = a
@RequestParam String xxx = a,b
request.getPrameterValues("xxx")=[a,b]
POST url參數獲取方式和GET一樣
POST application/x-www-form-urlencoded獲取方式和GET一樣
POST multipart/form-data獲取方式 @RequestParam MultipartFile file
註意:寫form表單要記得修改enctype=multipart/form-data
POST application/json獲取body json @RequestBody Object xxx
@RequestBody String xxx會獲取body的String值,無論是什麽contentType
一般這種情況,傳輸的是一個json對象,利用Springmvc,直接聲明對象,可以幫你轉換成你想要的對象。
基本覆蓋常用獲取參數的情況。後續有時間分析一下springmvc解析參數這塊源碼
ps:
對於GET方式的請求,瀏覽器會把http header和data一並發送出去,服務器響應200(返回數據);
而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)
Springmvc參數獲取