欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javaWeb傳收參數(shù)方式總結(jié)示例分析

 更新時間:2023年08月09日 11:57:55   作者:KenDoEverthing  
這篇文章主要為大家介紹了javaWeb傳收參數(shù)方式總結(jié)示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

首先梳理一下HTTP的一些知識

有時候,我真會被傳參搞得頭暈,這樣傳要怎么接收,那樣傳又要怎么接收? get可以json嗎?什么是json方式提交?等等問題,已困擾我許久 所以,在此想做個總結(jié),整理一下思緒,不再為傳收參煩惱!如有錯誤,望聯(lián)系糾正,感謝!

1.GET和POST請求,在傳參方面有什么區(qū)別

GET傳輸?shù)臄?shù)據(jù)存儲在URL上進行拼接 POST傳輸?shù)臄?shù)據(jù)存儲在Requst Body(請求體)中

2.http請求的中Content-Type

http的請求頭和響應(yīng)頭中都有Content-Type字段,這個字段向我們說明了請求和響應(yīng)的HTTP body(請求體或響應(yīng)體)存儲了什么類型的數(shù)據(jù),然后客戶端和服務(wù)端就可以根據(jù)http頭部得Content-Type正確解碼HTTP body內(nèi)容。

關(guān)聯(lián)第1點:GET方式的請求和Content-Type是沒有任何關(guān)系的,因為GET請求的數(shù)據(jù)在URL上。

好叻,進入正題。這里我們分為3種情況說明如何傳參與接參,分別為 GET方式請求、 表單提交、 Json提交

GET方式請求

(1).普通URL get請求

http://localhost:8080/ajaxGet?id=1&username=用戶名&userTrueName=真實姓名

//get也可以傳json,通過參數(shù)傳json字符串,然后后端進行解析(不過一般都不這么做)
http://localhost:8080/ajaxGet?user={"id":"1","username":"用戶名","userTrueName":"真實姓名"}

(2).表單類GET請求

<form id="fromGet" action="fromGet" method="GET">
<input  type="text"name="id"  value="1">
<input  type="text"name="username"  value="用戶名">
<input  type="text"  name="userTrueName"  value="真實名字">
</form>

(3).AJAX Get請求

(A)正確示例

$.ajax({
    type: "GET",
    url: "http://localhost:8080/ajaxGet",
    data:{"id":1,"username":"用戶名","userTrueName":"真實名稱"},
    //contentType:'application/x-www-form-urlencoded'
    contentType:'application/json'
});

注意:

1.data必須為json對象

2.實際上無需設(shè)置contentType 

示例中我故意設(shè)置了contentType,但其實不管設(shè)置成什么都是無效的,因為傳輸?shù)臄?shù)據(jù)會在發(fā)送請求時,對Json對象進行編碼解析,拼接到URL上,如下圖

(B)錯誤示例(data為json字符串)

//data為json字符串
$.ajax({
    type: "GET",
    url: "http://localhost:8080/ajaxGet",
    data:JSON.stringify({"id":1,"username":"用戶名","userTrueName":"真實名稱"}),
    //contentType:'application/x-www-form-urlencoded'
    contentType:'application/json'
});

GET請求時,data不能使用json字符串,無法解析,如下圖  

SpringMvc接收參數(shù)方式

1.實體類接收 2.Map接收,必須使用@RequestParam注解 3.拆開單個參數(shù)接收(參數(shù)少的情況可使用)

Form表單提交

ps:針對POST,第一點包含了所有GET請求方式

form表單提交一般說的是content-type為x-www-form-unlencoded或multipart/form-data的請求

(1) 傳統(tǒng)form表單提交,默認content-type為 x-www-form-unlencoded,如下

<form id="fromPost" action="fromPost" method="POST">
    <input type="text"name="id" value="1">
    <input type="text"name="username" value="用戶名">
    <input type="text" name="userTrueName" value="真實名字">
</form>

(2) 含文件的form表單,需要指明enctype為 multipart/form-data(enctype相當于content-type)

<form id="fromMutli" action="fromMutli" enctype="multipart/form-data" method="POST">
    <input type="text"name="id" value="1">
    <input type="file" name="file">
</form>

(3) Ajaxform表單提交

//data為json對象
$.ajax({
    type: "POST",
    url: "http://localhost:8080/ajaxPost",
    dataType: 'json',
    data:{"id":1,"username":"用戶名","userTrueName":"真實名稱"},
    contentType:'application/x-www-form-urlencoded'
});

SpringMvc接收參數(shù)方式

1.實體類接收

2.Map接收,必須使用@RequestParam注解

3.拆開單個參數(shù)接收(參數(shù)少的情況可使用)

4.后臺的file文件需要使用MultipartFile類型接收

Json提交

ps:針對POST,第一點包含了所有GET請求方式

Json提交一般說的是content-type為application/json的請求,傳輸?shù)腏son是Json字符串

正確示例

//注意:data為json字符串 contentType為application/json
$.ajax({
    type: "POST",
    url: "http://localhost:8080/ajaxPost",
    dataType: 'json',
    data:JSON.stringify({"id":1,"username":"用戶名","userTrueName":"真實名稱"}),
    contentType:'application/json;charset=urf-8'
});

注意:data為Json字符串,這個很重要

SpringMvc接收參數(shù)方式

必須使用@RequestBody注解

1.字符串接收,然后對Json字符串解析轉(zhuǎn)換

2.實體類接收 

3.Map接收 

如下:

@PostMapping(value = "ajaxPost")
public void ajaxPost(@RequestBody String param){
    JSONObject json = JSON.parseObject(param);
}
@PostMapping(value = "ajaxPost")
public void ajaxPost(@RequestBody User user){
}
@PostMapping(value = "ajaxPost")
public void ajaxPost(@RequestBody Map map){
}

總結(jié)

1.GET請求方式與Form提交,后端spingMvc接收參數(shù)方式相同,如下

  • (1)實體類接收
  • (2)Map接收,必須使用@RequestParam注解
  • (3)拆開單個參數(shù)接收(參數(shù)少的情況使用)
  • (4)后臺的file文件需要使用MultipartFil類型接收(form表單文件提交)

2.Json提交 

必須使用@RequestBody注解

  • (1)字符串接收,然后對json字符串解析轉(zhuǎn)換
  • (2)實體類接收 
  • (3)Map接收

建議

  • (1)參數(shù)少的查詢使用Get請求,參數(shù)多可使用Post
  • (2)涉及到數(shù)據(jù)庫的修改操作,使用Post請求
  • (3)Post請求統(tǒng)一使用Json提交(即content-type=application/json),統(tǒng)一方式方便前后端聯(lián)調(diào),json傳參靈活
  • (4)參數(shù)多的,使用實體類接收,因為Map含有參數(shù)的不確定性,根本看不出你需要的啥參數(shù),寧愿新建一個實體類接收參數(shù),可增強代碼的可讀性

比如使用swagger api文檔時,可使用注解標注的實體類對應(yīng)參數(shù),但用map的話,你要啥參數(shù),鬼知道咯~

拓展知識:

@RequestParam注解

其實使用注解@RequestParam就等同于request.getParamter獲取參數(shù) 但@RequestParam有更多的用處,它有以下幾個重要屬性

(1).value:前端傳參的參數(shù)名稱,這個屬性可以使得前端參數(shù)名字與方法參數(shù)名不相同,使用這個參數(shù)進行數(shù)據(jù)綁定就ok了

//前端傳參可以是"name" 方法參數(shù)中為"userName" 
//使用@RequestParam("name")可將name和userName進行綁定
//即可使用userName接收name的數(shù)據(jù)
@RequestMapping("/test")
public  void test(@RequestParam("name") String userName)){
}

(2)requried:表示是否是必須的參數(shù),默認為true,所以加上@RequestParam,默認這個參數(shù)就是必須的,如果沒有傳對應(yīng)參數(shù)會報錯

(3)defaultValue:參數(shù)默認值。即設(shè)置默認值后,沒有傳參時,會賦予參數(shù)一個默認值。設(shè)置了默認值,就算必須參數(shù)不傳也不會報錯

以上就是javaWeb傳收參數(shù)方式總結(jié)示例分析的詳細內(nèi)容,更多關(guān)于javaWeb傳收參數(shù)方式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java ffmpeg 實現(xiàn)視頻加文字/圖片水印功能(示例代碼)

    Java ffmpeg 實現(xiàn)視頻加文字/圖片水印功能(示例代碼)

    本文介紹了使用Java和ffmpeg庫實現(xiàn)視頻加文字或圖片水印的方法,通過引入依賴代碼和示例,詳細說明了如何將文字水印和圖片水印添加到視頻中,為需要在視頻中加入水印的開發(fā)者提供了實用的指導(dǎo),這種方法不僅增強了視頻內(nèi)容的版權(quán)保護,也為視頻編輯提供了更多的可能性
    2024-10-10
  • springboot整合redis之消息隊列

    springboot整合redis之消息隊列

    本文主要介紹了springboot整合redis之消息隊列,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Spring如何基于Proxy及cglib實現(xiàn)動態(tài)代理

    Spring如何基于Proxy及cglib實現(xiàn)動態(tài)代理

    這篇文章主要介紹了Spring如何基于Proxy及cglib實現(xiàn)動態(tài)代理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Java并發(fā)編程之Fork/Join框架的理解

    Java并發(fā)編程之Fork/Join框架的理解

    今天帶大家學習Java并發(fā)編程的相關(guān)知識,文中對Fork/Join框架作了非常詳細的介紹,對正在學習有關(guān)知識的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • 詳解Java中對象池的介紹與使用

    詳解Java中對象池的介紹與使用

    對象池,顧名思義就是一定數(shù)量的已經(jīng)創(chuàng)建好的對象(Object)的集合。這篇文章主要為大家介紹了Java中對象池的介紹與使用,感興趣的可以了解一下
    2023-02-02
  • idea解決springboot中的依賴版本沖突問題

    idea解決springboot中的依賴版本沖突問題

    這篇文章主要介紹了idea解決springboot中的依賴版本沖突問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringCloud Feign遠程調(diào)用實現(xiàn)詳解

    SpringCloud Feign遠程調(diào)用實現(xiàn)詳解

    Feign是Netflix公司開發(fā)的一個聲明式的REST調(diào)用客戶端; Ribbon負載均衡、 Hystrⅸ服務(wù)熔斷是我們Spring Cloud中進行微服務(wù)開發(fā)非常基礎(chǔ)的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時出現(xiàn)的,而且配置也都非常相似
    2022-11-11
  • Java反轉(zhuǎn)數(shù)組輸出實例代碼

    Java反轉(zhuǎn)數(shù)組輸出實例代碼

    這篇文章主要給大家介紹了關(guān)于Java反轉(zhuǎn)數(shù)組輸出以及利用Java實現(xiàn)字符串逆序輸出的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 完整B樹算法Java實現(xiàn)代碼

    完整B樹算法Java實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了完整的B樹算法Java實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java中的set集合是什么意思

    Java中的set集合是什么意思

    這篇文章主要介紹了Java中的set集合是什么意思,詳細地講解一下Collection集合中的另外一個分支——Set系列集合,需要的朋友可以參考下
    2022-05-05

最新評論