最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、@PathVariable

1.1 restful風格

1.1.1 概念

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

1.1.2 特點

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

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

功能傳統(tǒng)方式restful風格
查詢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 目標挺進發(fā)展過程中具有里程碑的意義
  • 通過 @PathVariable 可以將 URL 中占位符參數(shù)綁定到控制器(controller)處理方法的形參中:URL 中的 {xxx} 占位符可以通過@PathVariable(“xxx“) 綁定到操作方法的形參中。
  • 主要是根據(jù)請求方法進行類的區(qū)別

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

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

1.4 @PathVariable的使用

步驟:

  1. 通過@RequestMapping注解中的 { } 占位符來標識URL中的變量部分
  2. 在控制器中的處理方法的形參中使用@PathVariable注解去獲取@RequestMapping中 { } 中傳進來的值,并綁定到處理方法定一的形參上。
//請求路徑: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)用于將指定的請求參數(shù)賦值給方法中的形參。

2.2 @RequestParam的參數(shù)

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

2.3 注意事項

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

2.4 @RequestParam使用

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

//請求路徑: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簡介

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

3.2 注意事項

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

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

3.3 @RequestBody使用

3.3.1 編寫實體類User

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

3.3.2 編寫controller

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

3.3.3 使用postman進行接口測試

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

3.4 @RequestParam和@RequestBody

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

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

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

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

  • 通過@PathVariable,例如/blogs/1
  • 通過@RequestParam,例如blogs?blogId=1

那么究竟應該選擇哪一種呢?建議:

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

2、當URL需要對資源或者資源列表進行過濾,篩選時,用@RequestParam

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

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

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

相關(guān)文章

  • 詳解Java 中程序內(nèi)存的分析

    詳解Java 中程序內(nèi)存的分析

    這篇文章主要介紹了詳解Java 中程序內(nèi)存的分析的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 說說Spring中為何要引入Lookup注解

    說說Spring中為何要引入Lookup注解

    這篇文章主要給大家介紹了關(guān)于Spring中為何要引入Lookup注解的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Apache Maven創(chuàng)建工程的實現(xiàn)示例

    Apache Maven創(chuàng)建工程的實現(xiàn)示例

    本文詳細介紹了如何使用Maven創(chuàng)建一個新的Java工程,包括使用maven-archetype-plugin插件、項目的基本結(jié)構(gòu)和文件、構(gòu)建和運行項目的方法以及常見問題的解決,Maven通過簡化項目構(gòu)建和依賴管理,成為Java開發(fā)中不可或缺的工具
    2024-11-11
  • Java中的抽象類和接口你了解嗎

    Java中的抽象類和接口你了解嗎

    這篇文章主要為大家詳細介紹了Java中的抽象類和接口,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • 一文帶你深入了解Java8 Stream流式編程

    一文帶你深入了解Java8 Stream流式編程

    在實際項目當中,若能熟練使用Java8 的Stream流特性進行開發(fā),就比較容易寫出簡潔優(yōu)雅的代碼。本文主要就是基于實際項目常用的Stream Api流式處理總結(jié),希望對大家有所幫助
    2023-04-04
  • Spring security權(quán)限配置與使用大全

    Spring security權(quán)限配置與使用大全

    Spring Security 本質(zhì)上是借助一系列的 Servlet Filter來提供各種安全性功能,但這并不需要我們手動去添加或者創(chuàng)建多個Filter,本文重點給大家介紹spring-security的配置與使用及實現(xiàn)方式,感興趣的朋友一起看看吧
    2021-09-09
  • SpringBoot中自定義Starter的完整教程

    SpringBoot中自定義Starter的完整教程

    在 Spring Boot 中,自定義 Starter 是一種非常強大的方式,可以將常用的功能模塊封裝成可復用的組件,下面我們就來看看具體的實現(xiàn)方法吧
    2025-11-11
  • java -jar命令運行 jar包時運行外部依賴jar包的場景分析

    java -jar命令運行 jar包時運行外部依賴jar包的場景分析

    這篇文章主要介紹了java -jar命令運行 jar包時運行外部依賴jar包的場景分析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-06-06
  • JSON,AJAX,Maven入門基礎(chǔ)

    JSON,AJAX,Maven入門基礎(chǔ)

    這篇文章主要介紹了JSON,AJAX和Maven基礎(chǔ),如何使用AJAX讀取Json數(shù)組里面的數(shù)據(jù),感興趣的小伙伴們可以參考一下,希望能夠幫助到你
    2021-07-07
  • Java中LocalDate日期格式轉(zhuǎn)換(使用系統(tǒng)時區(qū))

    Java中LocalDate日期格式轉(zhuǎn)換(使用系統(tǒng)時區(qū))

    本文主要介紹了Java中LocalDate日期格式轉(zhuǎn)換(使用系統(tǒng)時區(qū)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2007-02-02

最新評論

光泽县| 甘洛县| 永仁县| 扶沟县| 平阳县| 凤台县| 平南县| 房产| 宁海县| 普定县| 石景山区| 休宁县| 永福县| 乡城县| 广州市| 湖南省| 宕昌县| 广丰县| 岱山县| 和龙市| 寿阳县| 香港| 都匀市| 乐陵市| 台前县| 张家港市| 甘德县| 五大连池市| 布拖县| 利辛县| 眉山市| 寻甸| 岑巩县| 囊谦县| 石景山区| 唐河县| 于田县| 万载县| 宁乡县| 上蔡县| 兖州市|