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

SpringBoot傳遞單一參數(shù)時@RequestParam和@RequestBody的區(qū)別小結(jié)

 更新時間:2023年08月25日 09:34:01   作者:SiegfriedG  
用SpringBoot框架做項目時,經(jīng)常需要前端給后端傳遞參數(shù),本文主要介紹了SpringBoot傳遞單一參數(shù)時@RequestParam和@RequestBody的區(qū)別,具有一定的參考價值,感興趣的可以了解一下

用SpringBoot框架做項目時,經(jīng)常需要前端給后端傳遞參數(shù),如果需要多條參數(shù),通常的做法是把這些參數(shù)封裝為一個對象來傳遞,前端用POST方式調(diào)用。但有時會遇到后端只需要一條參數(shù)(比如一個String)的情況,此時如果還封裝為一個對象,有些多余;最好的辦法是用GET方式調(diào)用,直接把參數(shù)拼接在url后面。但,一般項目都有統(tǒng)一的接口規(guī)范,要求接口都要用POST方式,此時就遇到一個問題:controller方法上到底是用@RequestParam注解還是用@RequestBody注解?

之前對這兩個注解的區(qū)別,只有一個粗枝大葉的理解——@RequestParam針對單一的參數(shù),而@RequestBody針對多個參數(shù)封裝為一個對象,問了身邊幾個同事,大概也都是這種理解。但是,實際測試中(使用Postman),當(dāng)我用@RequestParam接受String的單一參數(shù)時,前端給我傳遞的參數(shù)卻接收不到。于是決定通過實驗,徹底搞明白二者的區(qū)別(針對單一參數(shù)、POST方法的場景)。實驗的過程是分別用@RequestParam和@RequestBody兩個注解去接受前端傳遞的一個名為content的String。

實驗一:使用@RequestParam注解

Controller方法代碼:(省略其他部分以及返回值Result代碼)

@RequestMapping(value="/requestParam", method= RequestMethod.POST, produces = "application/json;charset=UTF-8")
public Result<String> requestParam(@RequestParam("content") String content) {
	System.out.println("content:"+content);
	return success(new Result<String>(), content);

現(xiàn)在我用postman來測試幾種可能的參數(shù)傳遞方式:

1. 在Body的raw里面?zhèn)鬟f,也是最通常的傳參方式:

body-raw

結(jié)果是接收不到(不管是用text還是json等各種文本形式)!

 { "timestamp": 1544798083474,
    "status": 400,
    "error": "Bad Request",
    "exception": "org.springframework.web.bind.MissingServletRequestParameterException",
    "message": "Required String parameter 'content' is not present",
    "path": "/testParam/requestParam"
  }

2. 在Headers里通過key-value的形式傳遞。這是網(wǎng)上一些帖子里說的方式。

Headers方式

但結(jié)果還是接收不到!和上面一樣報錯400。

關(guān)于這一點,網(wǎng)上有些帖子里說@RequestParam的參數(shù)會寫到Headers里,可見是錯誤的,并非在Headers里,還是在Body里。

3. 在Body的form-data里通過key-value的形式傳遞,可以接收!

form-data

但是,前端調(diào)后端接口傳參時,是無法向這個form-data里傳遞參數(shù)的,所以這種方法只能被排除。

4. 在url后問號拼接參數(shù)。和很多人一樣,之前一直根深蒂固地認(rèn)為只有GET方式才能用url問號傳參,POST方式不行,但事實證明在這里問號傳參POST方式同樣能接收到。如圖:

問號傳參

雖然能接受到參數(shù),但前端也有統(tǒng)一的規(guī)范,一般不使用問號傳參的方式,所以這種方法也被排除。

實驗二:使用@RequestBody注解

@RequestMapping(value="/requestBody", method= RequestMethod.POST, produces = "application/json;charset=UTF-8")
public Result<String> requestBody(@RequestBody String content) {
	System.out.println("content:"+content);
	return success(new Result<String>(), content);
}

既然是Body,自然不能在header里傳參,也不能在url里問號傳參。至于Body的form-data,經(jīng)測試也無效。所以,這里只有唯一一種方式,就是將參數(shù)直接寫在Body的raw模式下,實驗結(jié)果:可以接收到,如圖:

body

注意:這里body體里面?zhèn)魇裁磧?nèi)容,后臺就會原樣接收,所以不要寫成content: XXX這種鍵值對形式,而應(yīng)直接把String的內(nèi)容寫在body體里。

總結(jié):

對于傳遞單一參數(shù)(最典型的是String)的場合,理論上最簡便的方法是用GET請求。但鑒于很多項目接口統(tǒng)一要求使用POST方式,此時不能使用@RequestParam方式,因為此方式前端傳遞的參數(shù)后端無法接收;而只能用@RequestBody,直接將需要的參數(shù)內(nèi)容寫入Body體,后端即可正常獲??!

到此這篇關(guān)于SpringBoot傳遞單一參數(shù)時@RequestParam和@RequestBody的區(qū)別小結(jié)的文章就介紹到這了,更多相關(guān)SpringBoot @RequestParam @RequestBody內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot ActiveMQ如何設(shè)置訪問密碼

    Spring Boot ActiveMQ如何設(shè)置訪問密碼

    這篇文章主要介紹了Spring Boot ActiveMQ如何設(shè)置訪問密碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot線程池和Java線程池的使用和實現(xiàn)原理解析

    SpringBoot線程池和Java線程池的使用和實現(xiàn)原理解析

    這篇文章主要介紹了SpringBoot線程池和Java線程池的用法和實現(xiàn)原理,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Java開發(fā)中POJO和JSON互轉(zhuǎn)時如何忽略隱藏字段的問題

    Java開發(fā)中POJO和JSON互轉(zhuǎn)時如何忽略隱藏字段的問題

    這篇文章主要介紹了Java開發(fā)中POJO和JSON互轉(zhuǎn)時如何忽略隱藏字段的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • @RequestBody的使用案例代碼

    @RequestBody的使用案例代碼

    @RequestBody主要用來接收前端傳遞給后端的json字符串中的數(shù)據(jù)的,這篇文章主要介紹了@RequestBody的使用,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • Springboot3?ResponseEntity?完全使用案例

    Springboot3?ResponseEntity?完全使用案例

    ResponseEntity是SpringBoot中控制HTTP響應(yīng)的核心工具——它能讓你精準(zhǔn)定義響應(yīng)狀態(tài)碼、響應(yīng)頭、響應(yīng)體,相比直接返回實體類或字符串,靈活性和規(guī)范性提升一個量級,本文介紹Springboot3?ResponseEntity?完全使用教程,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Java中本地緩存的4種實現(xiàn)方式總結(jié)

    Java中本地緩存的4種實現(xiàn)方式總結(jié)

    這篇文章主要介紹了Java中本地緩存的4種實現(xiàn)方式,分別是基礎(chǔ)緩存實現(xiàn)、GuavaLoadingCache、SpringBoot整合Caffeine和JetCache,通過實例代碼,詳細(xì)講解了每種緩存技術(shù)的特點和使用方法,需要的朋友可以參考下
    2025-04-04
  • java使用多線程找出最大隨機數(shù)

    java使用多線程找出最大隨機數(shù)

    這篇文章主要為大家詳細(xì)介紹了java使用多線程找出最大隨機數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • java中a=a+1和a+=1的區(qū)別介紹

    java中a=a+1和a+=1的區(qū)別介紹

    這篇文章主要介紹了java中a=a+1和a+=1的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot中整合MyBatis-Plus的方法示例

    SpringBoot中整合MyBatis-Plus的方法示例

    這篇文章主要介紹了SpringBoot中整合MyBatis-Plus的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • spring boot 使用@Async實現(xiàn)異步調(diào)用方法

    spring boot 使用@Async實現(xiàn)異步調(diào)用方法

    本篇文章主要介紹了spring boot 使用@Async實現(xiàn)異步調(diào)用方法,具有一定的參考價值,有興趣的可以了解一下。
    2017-04-04

最新評論

滨州市| 麦盖提县| 武定县| 忻城县| 鄂伦春自治旗| 阳城县| 布尔津县| 漳浦县| 绥芬河市| 密云县| 乌兰浩特市| 三亚市| 久治县| 偏关县| 施秉县| 瑞昌市| 高邑县| 会理县| 项城市| 万年县| 东光县| 和龙市| 锡林浩特市| 岢岚县| 偃师市| 广西| 芒康县| 尼木县| 洪江市| 福清市| 南靖县| 忻城县| 教育| 营山县| 台北县| 普格县| 关岭| 扬州市| 延川县| 资兴市| 绥滨县|