小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

注解@RequestParam與@RequestBody的使用場景

 wwq圖書世界 2019-12-10

每一個成功人士的背后,必定曾經(jīng)做出過勇敢而又孤獨(dú)的決定。

放棄不難,但堅持很酷~

一、前言

一直有這么一個疑問:在使用postman工具測試api接口的時候,如何使用 json 字符串傳值呢,而不是使用 x-www-form-urlencoded 類型,畢竟通過 key-value 傳值是有局限性的。假如我要測試批量插入數(shù)據(jù)的接口呢,使用 x-www-form-urlencoded 方法根本就不適用于這種場景。

那么如何通過postman工具使用json字符串傳值呢,這里就引申出來了spring的兩個注解:

  • @RequestParam
  • @RequestBody

總而言之,這兩個注解都可以在后臺接收參數(shù),但是使用場景不一樣。繼續(xù)往下看 ↓

二、@RequestParam

先介紹一下@RequestParam的使用場景:

注解@RequestParam接收的參數(shù)是來自requestHeader中,即請求頭。通常用于GET請求,比如常見的url:http://localhost:8081/spring-boot-study/novel/findByAuthorAndType?author=唐家三少&type=已完結(jié),其在Controller 層的寫法如下圖所示:

@RequestParam有三個配置參數(shù):

  • required 表示是否必須,默認(rèn)為 true,必須。
  • defaultValue 可設(shè)置請求參數(shù)的默認(rèn)值。
  • value 為接收url的參數(shù)名(相當(dāng)于key值)。

@RequestParam用來處理 Content-Typeapplication/x-www-form-urlencoded 編碼的內(nèi)容,Content-Type默認(rèn)為該屬性。

@RequestParam也可用于其它類型的請求,例如:POST、DELETE等請求。比如向表中插入單條數(shù)據(jù),Controller 層的寫法如下圖所示:

由于@RequestParam是用來處理 Content-Typeapplication/x-www-form-urlencoded 編碼的內(nèi)容的,所以在postman中,要選擇body的類型為 x-www-form-urlencoded,這樣在headers中就自動變?yōu)榱?Content-Type : application/x-www-form-urlencoded 編碼格式。如下圖所示:

但是這樣不支持批量插入數(shù)據(jù)啊,如果改用 json 字符串來傳值的話,類型設(shè)置為 application/json,點(diǎn)擊發(fā)送的話,會報錯,后臺接收不到值,為 null

這時候,注解@RequestBody就派上用場了。繼續(xù)往下看 ↓

三、@RequestBody

先介紹一下@RequestBody的使用場景:

注解@RequestBody接收的參數(shù)是來自requestBody中,即請求體。一般用于處理非 Content-Type: application/x-www-form-urlencoded編碼格式的數(shù)據(jù),比如:application/json、application/xml等類型的數(shù)據(jù)。

application/json類型的數(shù)據(jù)而言,使用注解@RequestBody可以將body里面所有的json數(shù)據(jù)傳到后端,后端再進(jìn)行解析。

3.1 向表中批量插入數(shù)據(jù)

舉個批量插入數(shù)據(jù)的例子,Controller層的寫法如下圖所示:

由于@RequestBody可用來處理 Content-Typeapplication/json 編碼的內(nèi)容,所以在postman中,選擇body的類型為row -> JSON(application/json),這樣在 Headers 中也會自動變?yōu)?Content-Type : application/json 編碼格式。body內(nèi)的數(shù)據(jù)如下圖所示:

批量向表中插入兩條數(shù)據(jù),這里的 saveBatchNovel()方法已經(jīng)封裝了 JPAsaveAll() 方法。body 里面的 json 語句的 key 值要與后端實體類的屬性一一對應(yīng)。

注意:前端使用$.ajax的話,一定要指定 contentType: "application/json;charset=utf-8;",默認(rèn)為 application/x-www-form-urlencoded。

3.2 后端解析json數(shù)據(jù)

上述示例是傳遞到實體類中的具體寫法,那么如果傳遞到非實體類中,body里面的json數(shù)據(jù)需要怎么解析呢?我們再來看下面這個例子:

在body中,我們還是輸入上面的json數(shù)據(jù),根據(jù)分析,上面的json數(shù)據(jù)是一個List數(shù)組內(nèi)嵌套著map對象,那么在后臺的接收形式可寫為 List<Map<String, String>>,具體代碼如下圖所示:

postman請求:

控制臺輸出:

得出結(jié)論,通過@RequestBody可以解析Body中json格式的數(shù)據(jù)。

四、總結(jié)

注解@RequestParam接收的參數(shù)是來自requestHeader中,即請求頭。通常用于GET請求,像POST、DELETE等其它類型的請求也可以使用。

注解@RequestBody接收的參數(shù)是來自requestBody中,即請求體。一般用于處理非 Content-Type: application/x-www-form-urlencoded編碼格式的數(shù)據(jù),比如:application/json、application/xml等類型的數(shù)據(jù)。通常用于接收POST、DELETE等類型的請求數(shù)據(jù),GET類型也可以適用。

總算把這兩個的邏輯理清楚了,postman也會用json傳值了!趕緊整理成筆記,與大家分享?

源碼已上傳至https://github.com/841809077/spring-boot-study,歡迎Star。

求大家點(diǎn)點(diǎn)好看??,給點(diǎn)鼓勵。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多