亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot中@PathVariable、@RequestParam和@RequestBody的區(qū)別和使用詳解

 更新時(shí)間:2024年01月31日 08:32:38   作者:卷不動(dòng)躺不平的粥  
這篇文章主要介紹了SpringBoot中@PathVariable、@RequestParam和@RequestBody的區(qū)別和使用詳解,@PathVariable 映射 URL 綁定的占位符,通過(guò)@RequestMapping注解中的{}占位符來(lái)標(biāo)識(shí)URL中的變量部分,需要的朋友可以參考下

一、@PathVariable

1.1 restful風(fēng)格

1.1.1 概念

一種軟件架構(gòu)風(fēng)格、設(shè)計(jì)風(fēng)格,而不是標(biāo)準(zhǔn),只是提供了一組設(shè)計(jì)原則和約束條件。它主要用于客戶端和服務(wù)器交互類的軟件?;谶@個(gè)風(fēng)格設(shè)計(jì)的軟件可以更簡(jiǎn)潔,更有層次,更易于實(shí)現(xiàn)緩存等機(jī)制。

1.1.2 特點(diǎn)

  • REST:即 Representational State Transfer。(資源)表現(xiàn)層狀態(tài)轉(zhuǎn)化。是目前最流行的一種互聯(lián)網(wǎng)軟件架構(gòu)。它結(jié)構(gòu)清晰、符合標(biāo)準(zhǔn)、易于理解、擴(kuò)展方便,所以正得到越來(lái)越多網(wǎng)站的采用
  • 資源(Resources):網(wǎng)絡(luò)上的一個(gè)實(shí)體,或者說(shuō)是網(wǎng)絡(luò)上的一個(gè)具體信息。它可以是一段文本、一張圖片、一首歌曲、一種服務(wù),總之就是一個(gè)具體的存在??梢杂靡粋€(gè)URI(統(tǒng)一資源定位符)指向它,每種資源對(duì)應(yīng)一個(gè)特定的 URI 。要獲取這個(gè)資源,訪問(wèn)它的URI就可以,因此 URI 即為每一個(gè)資源的獨(dú)一無(wú)二的識(shí)別符。
  • 表現(xiàn)層(Representation):把資源具體呈現(xiàn)出來(lái)的形式,叫做它的表現(xiàn)層(Representation)。比如,文本可以用 txt 格式表現(xiàn),也可以用 HTML 格式、XML 格式、JSON 格式表現(xiàn),甚至可以采用二進(jìn)制格式。
  • 狀態(tài)轉(zhuǎn)化(State Transfer):每發(fā)出一個(gè)請(qǐng)求,就代表了客戶端和服務(wù)器的一次交互過(guò)程。HTTP協(xié)議,是一個(gè)無(wú)狀態(tài)協(xié)議,即所有的狀態(tài)都保存在服務(wù)器端。因此,如果客戶端想要操作服務(wù)器,必須通過(guò)某種手段,讓服務(wù)器端發(fā)生**“狀態(tài)轉(zhuǎn)化”**(State Transfer)。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是 “表現(xiàn)層狀態(tài)轉(zhuǎn)化”。具體說(shuō),就是 HTTP 協(xié)議里面,四個(gè)表示操作方式的動(dòng)詞:GET、POST、PUT、DELETE。它們分別對(duì)應(yīng)四種基本操作:GET 用來(lái)獲取資源,POST 用來(lái)新建資源,PUT 用來(lái)更新資源,DELETE 用來(lái)刪除資源。

1.1.3 restful風(fēng)格和傳統(tǒng)操作方式的對(duì)比

功能傳統(tǒng)方式restful風(fēng)格
查詢http://127.0.0.1/item/selectUser?id=1GET http://127.0.0.1/item/selectUser/1
新增http://127.0.0.1/item/addUserPOST http://127.0.0.1/item/addUser
更新http://127.0.0.1/item/updateUserPUT http://127.0.0.1/item/updateUser
刪除http://127.0.0.1/item/deleteUser?id=1DELETE http://127.0.0.1/item/deleteUser/1

1.2 @PathVariable的介紹

@PathVariable 映射 URL 綁定的占位符

  • 帶占位符的 URL 是 Spring3.0 新增的功能,該功能在SpringMVC 向 REST 目標(biāo)挺進(jìn)發(fā)展過(guò)程中具有里程碑的意義
  • 通過(guò) @PathVariable 可以將 URL 中占位符參數(shù)綁定到控制器(controller)處理方法的形參中:URL 中的 {xxx} 占位符可以通過(guò)@PathVariable(“xxx“) 綁定到操作方法的形參中。
  • 主要是根據(jù)請(qǐng)求方法進(jìn)行類的區(qū)別

1.3 @PathVariable所具有的參數(shù)

  • String value:可指定占位符 { } 中的參數(shù)名,若只指定value這一個(gè)屬性可省略屬性名不寫(xiě),若占位符中的參數(shù)名和處理方法中的參數(shù)名相同可省略此屬性。
  • String name:等價(jià)與value,和value無(wú)本質(zhì)上的差異,兩個(gè)屬性指定其一即可。
  • boolean required:是否必需,默認(rèn)為 true,即 請(qǐng)求中必須包含該參數(shù),如果沒(méi)有包含,將會(huì)拋出異常(可選配置)

1.4 @PathVariable的使用

步驟:

  1. 通過(guò)@RequestMapping注解中的 { } 占位符來(lái)標(biāo)識(shí)URL中的變量部分
  2. 在控制器中的處理方法的形參中使用@PathVariable注解去獲取@RequestMapping中 { } 中傳進(jìn)來(lái)的值,并綁定到處理方法定一的形參上。
//請(qǐng)求路徑:http://127.0.0.1/user/tom
@RequestMapping(value="/user/{name}")
public String username(@PathVariable(value="name") String username) {
    return username;
}

二、@RequestParam

2.1 @RequestParam定義

@RequestParam (org.springframework.web.bind.annotation.RequestParam)用于將指定的請(qǐng)求參數(shù)賦值給方法中的形參。

2.2 @RequestParam的參數(shù)

  • String value:請(qǐng)求中傳入?yún)?shù)的名稱,如果不設(shè)置value值,則會(huì)默認(rèn)為該變量名。
  • String name:等價(jià)與value,和value無(wú)本質(zhì)上的差異,兩個(gè)屬性指定其一即可。
  • boolean required:是否必需,默認(rèn)為 true,即 請(qǐng)求中必須包含該參數(shù),如果沒(méi)有包含,將會(huì)拋出異常(可選配置)
  • String defaultValue:參數(shù)的默認(rèn)值,如果請(qǐng)求中沒(méi)有同名的參數(shù)時(shí),該變量默認(rèn)為此值。

2.3 注意事項(xiàng)

  • 如果參數(shù)前寫(xiě)了@RequestParam(xxx),那么前端必須有對(duì)應(yīng)的xxx名字才行(不管其是否有值,當(dāng)然可以通 過(guò)設(shè)置該注解的required屬性來(lái)調(diào)節(jié)是否必須傳),如果沒(méi)有xxx名的話,那么請(qǐng)求會(huì)出錯(cuò),報(bào)400。
  • 如果參數(shù)前不寫(xiě)@RequestParam(xxx)的話,那么就前端可以有可以沒(méi)有對(duì)應(yīng)的xxx名字才行,如果有xxx名的話,那么就會(huì)自動(dòng)匹配;沒(méi)有的話,請(qǐng)求也能正確發(fā)送。

2.4 @RequestParam使用

在SpringMVC框架中,可以通過(guò)定義@RequestMapping來(lái)處理URL請(qǐng)求。和@PathVariable一樣,需要在處理URL的控制方法中獲取URL中的參數(shù),也就是?key1=value1&key2=value2這樣的參數(shù)列表。通過(guò)注解@RequestParam可以輕松地將URL中的參數(shù)綁定到處理函數(shù)方法的變量中。

//請(qǐng)求路徑:http://127.0.0.1/user/?name=tom
@RequestMapping(value="/user")
public String getUserBlog(@RequestParam(value="name") String username) {
    return name;
}

三、@RequestBody

3.1 @RequestBody簡(jiǎn)介

@RequestBody主要用來(lái)接收前端傳遞給后端的json字符串中的數(shù)據(jù)的(請(qǐng)求體中的數(shù)據(jù)的);GET方式無(wú)請(qǐng)求體,所以使用@RequestBody接收數(shù)據(jù)時(shí),前端不能使用GET方式提交數(shù)據(jù),而是用POST等方式進(jìn)行提交。

3.2 注意事項(xiàng)

如果后端參數(shù)是一個(gè)對(duì)象,且該參數(shù)前是以@RequestBody修飾的,那么前端傳遞json參數(shù)時(shí),必須滿足以下要求:

  • 后端@RequestBody注解對(duì)應(yīng)的類在將HTTP的輸入流(含請(qǐng)求體)裝配到目標(biāo)類(即:@RequestBody后面的類)時(shí),會(huì)根據(jù)json字符串中的key來(lái)匹配對(duì)應(yīng)實(shí)體類的屬性,如果匹配一致且json中的該key對(duì)應(yīng)的值符合(或可轉(zhuǎn)換為), 實(shí)體類的對(duì)應(yīng)屬性的類型要求時(shí),會(huì)調(diào)用實(shí)體類的setter方法將值賦給該屬性。
  • json字符串中,如果value為""的話,后端對(duì)應(yīng)屬性如果是String類型的,那么接受到的就是"",如果是后端屬性的類型是Integer、Double等類型,那么接收到的就是null。
  • json字符串中,如果value為null的話,后端對(duì)應(yīng)收到的就是null。
  • 如果某個(gè)參數(shù)沒(méi)有value的話,在傳json字符串給后端時(shí),要么干脆就不把該字段寫(xiě)到j(luò)son字符串中;要么寫(xiě)value時(shí), 必須有值,null 或""都行。

3.3 @RequestBody使用

3.3.1 編寫(xiě)實(shí)體類User

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private String name;
    private int age;
    private String gender;
}

3.3.2 編寫(xiě)controller

@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/addUser")
    public void addUser(@RequestBody User user){
        System.out.println(user);
    }
}

3.3.3 使用postman進(jìn)行接口測(cè)試

3.3.4 后臺(tái)數(shù)據(jù)輸出

3.4 @RequestParam和@RequestBody

當(dāng)同時(shí)使用 @RequestParam 和 @RequestBody 時(shí),@RequestParam指定的參數(shù)可以是普通元素、 數(shù)組、集合、對(duì)象等等(即:當(dāng),@RequestBody 與@RequestParam 可以同時(shí)使用時(shí),原SpringMVC接收 參數(shù)的機(jī)制不變,只不過(guò)RequestBody 接收的是請(qǐng)求體里面的數(shù)據(jù);而@RequestParam接收的是key-value 里面的參數(shù),所以它會(huì)被切面進(jìn)行處理從而可以用普通元素、數(shù)組、集合、對(duì)象等接收)。

即:如果參數(shù)時(shí)放在請(qǐng)求體中,傳入后臺(tái)的話,那么后臺(tái)要用@RequestBody才能接收到;如果不是放在 請(qǐng)求體中的話,那么后臺(tái)接收前臺(tái)傳過(guò)來(lái)的參數(shù)時(shí),要用@RequestParam來(lái)接收,或則形參前什么也不寫(xiě)也能接收。

四、@RequestParam和@PathVariable的區(qū)別

@RequestParam和@PathVariable都能夠完成類似的功能——因?yàn)楸举|(zhì)上,它們都是用戶的輸入,只不過(guò)輸入的部分不同,一個(gè)在URL路徑部分,另一個(gè)在參數(shù)部分。要訪問(wèn)一篇博客文章,這兩種URL設(shè)計(jì)都是可以的:

  • 通過(guò)@PathVariable,例如/blogs/1
  • 通過(guò)@RequestParam,例如blogs?blogId=1

那么究竟應(yīng)該選擇哪一種呢?建議:

1、當(dāng)URL指向的是某一具體業(yè)務(wù)資源(或資源列表),例如博客,用戶時(shí),使用@PathVariable

2、當(dāng)URL需要對(duì)資源或者資源列表進(jìn)行過(guò)濾,篩選時(shí),用@RequestParam

例如我們會(huì)這樣設(shè)計(jì)URL:

  • /blogs/{blogId}
  • /blogs?state=publish而不是/blogs/state/publish來(lái)表示處于發(fā)布狀態(tài)的博客文章

到此這篇關(guān)于SpringBoot中@PathVariable、@RequestParam和@RequestBody的區(qū)別和使用詳解的文章就介紹到這了,更多相關(guān)@PathVariable、@RequestParam和@RequestBody的區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談java常用的幾種線程池比較

    淺談java常用的幾種線程池比較

    下面小編就為大家?guī)?lái)一篇淺談java常用的幾種線程池比較。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • MyBatis動(dòng)態(tài)<if>標(biāo)簽使用避坑指南

    MyBatis動(dòng)態(tài)<if>標(biāo)簽使用避坑指南

    這篇文章主要為大家介紹了MyBatis動(dòng)態(tài)<if>標(biāo)簽使用避坑指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 如何利用泛型封裝通用的service層

    如何利用泛型封裝通用的service層

    這篇文章主要介紹了如何利用泛型封裝通用的service層,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 使用Java對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本的查詢和更新操作

    使用Java對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本的查詢和更新操作

    這篇文章主要介紹了使用Java對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本的查詢和更新操作,是Java入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • SpringCloud?hystrix斷路器與全局解耦全面介紹

    SpringCloud?hystrix斷路器與全局解耦全面介紹

    什么是服務(wù)降級(jí)?當(dāng)服務(wù)器壓力劇增的情況下,根據(jù)實(shí)際業(yè)務(wù)情況及流量,對(duì)一些服務(wù)和頁(yè)面有策略的不處理或換種簡(jiǎn)單的方式處理,從而釋放服務(wù)器資源以保證核心交易正常運(yùn)作或高效運(yùn)作
    2022-10-10
  • Spring中AOP概念與兩種動(dòng)態(tài)代理模式原理詳解

    Spring中AOP概念與兩種動(dòng)態(tài)代理模式原理詳解

    AOP是面向切面編程的技術(shù),AOP基于IoC基礎(chǔ),是對(duì)OOP的有益補(bǔ)充,流行的AOP框架有Sping AOP、AspectJ,這篇文章主要給大家介紹了關(guān)于Spring中AOP概念與兩種動(dòng)態(tài)代理模式原理的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Java Lock接口實(shí)現(xiàn)原理及實(shí)例解析

    Java Lock接口實(shí)現(xiàn)原理及實(shí)例解析

    這篇文章主要介紹了Java Lock接口實(shí)現(xiàn)原理及實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 非常適合新手學(xué)生的Java線程池超詳細(xì)分析

    非常適合新手學(xué)生的Java線程池超詳細(xì)分析

    作者是一個(gè)來(lái)自河源的大三在校生,以下筆記都是作者自學(xué)之路的一些淺薄經(jīng)驗(yàn),如有錯(cuò)誤請(qǐng)指正,將來(lái)會(huì)不斷的完善筆記,幫助更多的Java愛(ài)好者入門(mén)
    2022-03-03
  • Hibernate框架中的緩存技術(shù)詳解

    Hibernate框架中的緩存技術(shù)詳解

    這篇文章主要介紹了Hibernate框架中的緩存技術(shù),結(jié)合實(shí)例形式詳細(xì)分析了Hibernate框架緩存機(jī)制的原理與具體使用技巧,需要的朋友可以參考下
    2016-03-03
  • Java中常用的四種引用類型詳解

    Java中常用的四種引用類型詳解

    Java中常用的四種引用類型,分別為,強(qiáng)引用、軟引用、弱引用以及虛引用,這篇文章主要為大家介紹了這四種引用的用法,需要的可以參考一下
    2023-06-06

最新評(píng)論