有時候,我真會被傳參搞得頭暈,這樣傳要怎麼接收,那樣傳又要怎麼接收? get可以json嗎?什麼是json方式提交?等等問題,已困擾我許久 所以,在此想做個總結,整理一下思緒,不再為傳收參煩惱!如有錯誤,望聯絡糾正,感謝!
首先梳理一下http的一些知識
1.get和post請求,在傳參方面有什麼區別
get傳輸的資料儲存在url上進行拼接 post傳輸的資料儲存在requst body(請求體)中
2.http請求的中content-type
http的請求頭和響應頭中都有content-type欄位,這個欄位向我們說明了請求和響應的http body(請求體或響應體)儲存了什麼型別的資料,然後客戶端和服務端就可以根據http頭部得content-type正確解碼http body內容。
關聯第1點
:get方式的請求和content-type是沒有任何關係的,因為get請求的資料在url上。
好叻,進入正題。這裡我們分為3種情況說明如何傳參與接參,分別為get方式請求
、表單提交
、json提交
(1).普通url get請求
http://localhost:8080/ajaxget?id=1&username=使用者名稱&usertruename=真實姓名
//get也可以傳json,通過引數傳json字串,然後後端進行解析(不過一般都不這麼做)
(2).表單類get請求
(3).ajax get請求(a)正確示例
$.ajax(,
});
注意:
1.data必須為json物件
2.實際上無需設定contenttype
示例中我故意設定了contenttype,但其實不管設定成什麼都是無效的
,因為傳輸的資料會在傳送請求時,對json物件進行編碼解析
,拼接到url上,如下圖
(b)錯誤示例(data為json字串)
//data為json字串
$.ajax(),
});
get請求時,data不能使用json字串,無法解析,如下圖
springmvc接收引數方式
1.實體類接收 2.map接收,必須使用@requestparam註解 3.拆開單個引數接收(引數少的情況可使用)
ps:針對post,第一點包含了所有get請求方式
form表單提交一般說的是content-type為x-www-form-unlencoded或multipart/form-data的請求
(1) **傳統form表單提交,**預設content-type為x-www-form-unlencoded
,如下
(2)含檔案的form表單,需要指明enctype為multipart/form-data
(enctype相當於content-type)
(3)ajaxform表單提交
//data為json物件
$.ajax(,
});
springmvc接收引數方式1.實體類接收 2.map接收,必須使用@requestparam註解 3.拆開單個引數接收(引數少的情況可使用) 4.後台的file檔案需要使用multipartfile型別接收
ps:針對post,第一點包含了所有get請求方式
正確示例
$.ajax(),
});
注意:**data為json字串,**這個很重要
springmvc接收引數方式
必須使用@requestbody註解
1.字串接收,然後對json字串解析轉換
2.實體類接收
3.map接收
如下:public void ajaxpost(@requestbody string param)
public void ajaxpost(@requestbody user user)
public void ajaxpost(@requestbody map map)
1.get請求方式與form提交,後端spingmvc接收引數方式相同,如下
(1)實體類接收
(2)map接收,必須使用@requestparam註解
(3)拆開單個引數接收(引數少的情況使用)
(4)後台的file檔案需要使用multipartfil型別接收(form表單檔案提交)
2.json提交
必須使用@requestbody註解
(1)字串接收,然後對json字串解析轉換
(2)實體類接收
(3)map接收
3.建議:
(1)引數少的查詢使用get請求,引數多可使用post
(2)涉及到資料庫的修改操作,使用post請求
(4)引數多的,使用實體類接收,因為map含有引數的不確定性,根本看不出你需要的啥引數,寧願新建乙個實體類接收引數,可增強**的可讀性
比如使用swagger api文件時,可使用註解標註的實體類對應引數,但用map的話,你要啥引數,鬼知道咯~
@requestparam註解
其實使用註解@requestparam就等同於request.getparamter獲取引數 但@requestparam有更多的用處,它有以下幾個重要屬性
(1).value:前端傳參的引數名稱,這個屬性可以使得前端引數名字與方法引數名不相同,使用這個引數進行資料繫結就ok了
//前端傳參可以是"name" 方法引數中為"username"
//使用@requestparam("name")可將name和username進行繫結
//即可使用username接收name的資料
public void test(@requestparam("name") string username))
(2)requried:表示是否是必須的引數,預設為true,所以加上@requestparam,預設這個引數就是必須的,如果沒有傳對應引數會報錯
(3)defaultvalue:引數預設值。即設定預設值後,沒有傳參時,會賦予引數乙個預設值。設定了預設值,就算必須引數不傳也不會報錯
thandks
乙個立志成大腿而每天努力奮鬥的年輕人
伴學習伴成長,成長之路你並不孤單!
javaWeb傳收引數方式總結
有時候,我真會被傳參搞得頭暈,這樣傳要怎麼接收,那樣傳又要怎麼接收?get可以json嗎?什麼是json方式提交?等等問題,已困擾我許久 所以,在此想做個總結,整理一下思緒,不再為傳收參煩惱!如有錯誤,望聯絡糾正,感謝 首先梳理一下http的一些知識 1.get和post請求,在傳參方面有什麼區別 ...
SpingMvc複雜引數傳收總結
一.簡單陣列集合類 比如long,string,list等 前端 1.重複單個引數 1 普通 2 ajaxget方式 傳送請求時等於 1 方式 ajax 3 form表單get方式 傳送請求時等於 1 方式 4 form表單post方式 傳送請求引數會被拼接成 id 1 id 2 id 3 儲存在請...
vue路由router傳引數方式
params query是什麼?params router1 id router1 123,router1 789 這裡的id叫做params query router1?id 123 router1?id 456 這裡的id叫做query。this router.push 或者使用路由的name ...