1. 程式人生 > 其它 >@RequestBody、@RequestParam和@PathVariable的區別

@RequestBody、@RequestParam和@PathVariable的區別

@RequestBody、@RequestParam和@PathVariable的區別

一、註解之間的區別

@RequestParam 和 @PathVariable 一樣,都是用於從request請求中繫結引數的,區別在於:

1:@RequestParam是用於接收URL的查詢串中的相應的引數以及請求體中的引數;
2:@PathVariable是用於接收URL中佔位符的引數
3:@RequestParam 和 @PathVariable 註解是用於從 request 中接收請求的,兩個都可以接收引數,關鍵點不同的是 @RequestParam 是從 request 裡面拿取值,而 @PathVariable 是從一個 url 模板裡面來填充。
4:@RequestParam 註解是獲取靜態 url 傳入的引數
@PathVariable 是獲取請求路徑中的變數作為引數,需要和 @RequestMapping(“item/{itemId}”) 配合使用。

@RequestBody和 @RequestParam區別在於:

1:@RequestParam是用於接收URL的查詢串中的相應的引數以及請求體中的引數;
2:@RequestBody是用於接收post請求中form表單中的資料,用來接收前端傳遞給後端的 json 字串中的資料(請求體中的資料);
3:在 Get 請求中,不能使用 @RequestBody。 在 Post 請求,可以使用 @RequestBody 和 @RequestParam,但是如果使用 @RequestBody,對於引數轉化的配置必須統一。
4:@RequestParam 註解接收的引數是來自於 requestHeader 中,即請求頭。都是用來獲取請求路徑 url 中的動態引數。也就是在 url 中,格式為 xxx?username=123&password=456。
@RequestBody 註解接收的引數則是來自於 requestBody 中,即請求體中。
Get 方式無請求體,所以使用 @RequestBody 接收資料時,前端不能使用 Get 方式提交資料;
而是使用 Post 方式進行提交的。在後端的同一個接收方法裡,@RequestBody 與 @RequestParam() 可以同時使用; @RequestBody 最多隻能有一個,而 @RequestParam() 可以有多個。

二、註解示例

1. @RequestParam 示例

接收請求行中URL後的查詢串引數,當訪問URL為 localhost:8080/demo1?name=Aaron&age=18時,將會把查詢串中的引數按名繫結到demo1方法的相應形參上, 接收請求體中的引數

@RequestMapping(value = "/demo1")
public void demo1(@RequestParam String name,@RequestParam int age) {

}

當請求頭中的 Content-Type 型別為:multipart/form-data 或 application/x-www-form-urlencoded 時,該@RequestParam註解同樣可以把請求體中相應的引數繫結到Controller方法的相應形參中

2.@PathVariable 示例

現有Controller如下,當訪問URL為 localhost:8080/demo2/Bob/12時,將會把URL佔位符的的引數按名繫結到demo2方法的相應形參上

@RequestMapping(value = "/demo2/{name}/{id}")
public void demo2(@PathVariable String name,@PathVariable int id) {

}

3.@RequestBody示例

在post請求中,當訪問URL為 localhost:8080/getproduct,而且post的部分資料為{id:32}

參考連結:

https://blog.csdn.net/weixin_49770443/article/details/109311246
https://blog.csdn.net/qq_32683235/article/details/113878052