Spring Boot API 的 x-www-form-urlencoded 提交

在使用 Sprint Boot 提交 x-www-form-urlencoded 的時候,我們首先需要知道 x-www-form-urlencoded 這個是什麼東西。

application/x-www-form-urlencoded

這應該是最常見的 POST 提交數據的方式了。瀏覽器的原生 表單,如果不設置 enctype 屬性,那麼最終就會以 application/x-www-form-urlencoded 方式提交數據。

就是瀏覽器將會將表單中的內容轉換爲 URL 的方式提交到後臺進行處理。轉換的方式其實就是使用 K=V 對的方式。

不同的 K=V 之間是用 & 進行分隔。

例如下面的示例:

POST /test HTTP/1.1
Host: foo.example
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

field1=value1&field2=value2

你可以在你的 API 後面直接加上上面的字符串,然後 POST 請求過去,在上面的字符串和 URL 之間需要添加一個 ? 號。

轉換流程是:

假設你有一個表單,在表單中獲取的值爲:

field1=value1
field2=value2

你需要提交的 URL 爲 api.example.com/re/request 這樣的話。

如果你使用了 application/x-www-form-urlencoded 提交的話,瀏覽器首先將表單中的數據轉換爲:field1=value1&field2=value2,請注意中間是使用 & 分隔的。

然後提交到地址:api.example.com/re/request?field1=value1&field2=value2,上面顯示的是完整的 URL。

這種提交方式是表單的默認提交方式,同時提交的字符將會進行編碼,如果你提交中文字符的話,你可能會看到 %UER,這樣的表達,這是因爲對中文字符進行了編碼而已。

POSTMAN 設置

在使用這種提交之前,你可以在 POSTMAN 設置。

 

application-01

 

需要在 POSTMAN 中選擇提交方式,並且在下面的參數部分設置需要的參數然後單擊發送提交即可。

Spring Boot Controller

在 Spring Boot Controller 中需要設置使用 MultiValueMap。

在查看源代碼後,你會知道 MultiValueMap 是擴展 Map 的接口,然後用於存儲多值的。

 

application-02

 

一個 Controller 的代碼如下:

    @PostMapping("/soldm")
    public ResponseEntity<?> searchUsers(@RequestBody MultiValueMap< String, String > values) {

        logger.debug("K=V Map - {}" , values);

        REListing reListing=  listingService.getREListingById();

        return new ResponseEntity<REListing>(reListing, HttpStatus.OK);
    }

在 RequestBody 設置 MultiValueMap 後,你就可以獲得 POST 提交的數據了。

 

application-03

 

測試運行

測試運行後查看日誌:

2021-01-27 10:52:38.782 DEBUG 25176 --- [nio-8080-exec-4] c.o.e.s.controller.RealEstateController  : K=V Map - {field1=[value1], field2=[value1]}

 

application-04

 

從這裏,你可以 debug 上傳的數據和 MAP 中是否設置了正確的參數。

 

https://www.ossez.com/t/spring-boot-api-x-www-form-urlencoded/13225

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章