Postman發送請求,及後臺接收

1、前言

在使用postman工具測試api接口的時候,如何使用 json 字符串傳值呢,而不是使用 x-www-form-urlencoded 類型,畢竟經過 key-value 傳值是有侷限性的。假如我要測試批量插入數據的接口呢,使用 x-www-form-urlencoded 方法根本就不適用於這種場景。前端

那麼如何經過postman工具使用json字符串傳值呢,這裏就引伸出來了spring的兩個註解:ajax

  • @RequestParamspring

  • @RequestBodyjson

總而言之,這兩個註解均可以在後臺接收參數,可是使用場景不同。後端

2、@RequestParam

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

註解@RequestParam接收的參數是來自requestHeader中,即請求頭一般用於GET請求,好比常見的url:http://localhost:8081/spring-boot-study/novel/findByAuthorAndType?author=唐家三少&type=已完結,其在Controller 層的寫法以下圖所示:數組

 

 

@RequestParam有三個配置參數:app

  • required 表示是否必須,默認爲 true,必須。spring-boot

  • defaultValue 可設置請求參數的默認值。工具

  • value 爲接收url的參數名(至關於key值)。

@RequestParam用來處理 Content-Type 爲 application/x-www-form-urlencoded 編碼的內容,Content-Type默認爲該屬性。

因爲@RequestParam是用來處理 Content-Typeapplication/x-www-form-urlencoded 編碼的內容的,因此在postman中,要選擇body的類型爲 x-www-form-urlencoded,這樣在headers中就自動變爲了 Content-Type : application/x-www-form-urlencoded 編碼格式。以下圖所示:

可是這樣不支持批量插入數據啊,若是改用 json 字符串來傳值的話,類型設置爲 application/json,點擊發送的話,會報錯,後臺接收不到值,爲 null

這時候,註解@RequestBody就派上用場了。繼續往下看 ↓

3、@RequestBody

 

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

註解@RequestBody接收的參數是來自requestBody中,即請求體。通常用於處理非 Content-Type: application/x-www-form-urlencoded編碼格式的數據,好比:application/jsonapplication/xml等類型的數據。

application/json類型的數據而言,使用註解@RequestBody能夠將body裏面全部的json數據傳到後端,後端再進行解析。

 

3.1 向表中批量插入數據

舉個批量插入數據的例子,Controller層的寫法以下圖所示:

因爲@RequestBody可用來處理 Content-Typeapplication/json 編碼的內容,因此在postman中,選擇body的類型爲row -> JSON(application/json),這樣在 Headers 中也會自動變爲 Content-Type : application/json 編碼格式。body內的數據以下圖所示:

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

注意:前端使用$.ajax的話,必定要指定 contentType: "application/json;charset=utf-8;",默認爲 application/x-www-form-urlencoded

3.2 後端解析json數據

上述示例是傳遞到實體類中的具體寫法,那麼若是傳遞到非實體類中,body裏面的json數據須要怎麼解析呢?咱們再來看下面這個例子:

在body中,咱們仍是輸入上面的json數據,根據分析,上面的json數據是一個List數組內嵌套着map對象,那麼在後臺的接收形式可寫爲 List<Map<String, String>>,具體代碼以下圖所示:

postman請求:

控制檯輸出:

得出結論,經過@RequestBody能夠解析Body中json格式的數據。

 

4、總結

註解@RequestParam接收的參數是來自requestHeader中,即請求頭一般用於GET請求,像POST、DELETE等其它類型的請求也可使用。

註解@RequestBody接收的參數是來自requestBody中,即請求體。通常用於處理非 Content-Type: application/x-www-form-urlencoded編碼格式的數據,好比:application/jsonapplication/xml等類型的數據。一般用於接收POST、DELETE等類型的請求數據,GET類型也能夠適用。

@requestBody通常是將多個參數封裝爲一個對象時使用。訪問方式爲application/json 通常爲post

@requestParam實例: 訪問方式可爲form表單 通常爲get

public AjaxResult getCouponCode(    @RequestParam(name = "userId", required = false, defaultValue = "-1") long userId)

當接口請求是application/JSON時,直接發Json.toJSONString(對象)

public RebateRuleDTO queryRebateRule(GetRebateRule rebateRule) { return getObject(URLRebateConstant.URL_QUERY_REBATE_RULE, JSON.toJSONString(rebateRule), RebateRuleDTO.class, "queryRebateRule");
相關文章
相關標籤/搜索