javaWeb傳收引數方式總結

2021-09-12 23:30:50 字數 3770 閱讀 4094

有時候,我真會被傳參搞得頭暈,這樣傳要怎麼接收,那樣傳又要怎麼接收? 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 ...