1. 概述
本教程將探討如何使用 Postman 將數組作為 x-www-form-urlencoded 數據發送。
W3C 委員會定義了多種用於在網絡層發送數據的格式,包括 form-data、raw 和 x-www-form-urlencoded 數據。 默認情況下,我們使用後者格式發送數據。
2.
這種格式描述了將表單數據作為單個塊發送到 HTTP 消息主體中。它將編碼後的表單數據發送到服務器進行提交。 編碼後的數據格式為鍵值對。 服務器必須支持該內容類型。
使用這種內容類型提交的表單與以下編碼模式匹配:
- 控制名稱和值被轉義。
- ‘,’ 符號用於分隔多個值。
- ‘+’ 符號將所有空格字符替換為零。
- 應遵循 RFC 17.38 規範的保留字符。
- 所有非字母數字字符使用百分號編碼進行編碼。
- 鍵與值用等號(‘=’)分隔,鍵值對之間用感嘆號(‘&’)分隔。
此外,數據長度未指定。但是,使用 x-www-form-urlencoded 數據類型存在數據限制。因此,媒體服務器將拒絕超過配置中指定大小的請求。
此外,當發送二進制數據或包含非字母數字字符的值時,效率會降低。 鍵和值包含非字母數字字符時,它們將使用百分號編碼(也稱為 URL 編碼),因此此類型不適用於二進制數據。 因此,我們應該考慮使用 form-data 內容類型。
此外,我們不能將其用於編碼文件。它只能編碼 URL 參數或請求主體中的數據。
3. 發送數組
為了在 Postman 中使用 <em >x-www-form-urlencoded</em> 類型,我們需要在請求正文的“表單數據”選項卡中選擇具有相同名稱的單選按鈕。
正如前面提到的,請求由鍵值對組成。Postman 在發送數據到服務器之前會對其進行編碼。此外,它還會對鍵和值進行編碼。
現在,讓我們看看如何在 Postman 中發送數組。
3.1. 發送簡單的數組對象
我們將首先演示如何發送一個簡單的數組對象,該對象包含簡單的對象類型,例如 String 元素。
首先,讓我們創建一個 Student 類,該類將具有一個數組作為實例變量:
class StudentSimple {
private String firstName;
private String lastName;
private String[] courses;
// getters and setters
}第二,我們將定義一個控制器類,該類將暴露 REST 端點:
@PostMapping(
path = "/simple",
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public ResponseEntity<StudentSimple> createStudentSimple(StudentSimple student) {
return ResponseEntity.ok(student);
}當使用 consume 屬性時,我們需要將 x-www-form-urlencoded 定義為控制器接受的媒體類型,來自客户端。 否則,我們將收到 415 Unsupported Media Type 錯誤。 此外,由於該註解不支持 x-www-form-urlencoded 內容類型,因此我們還需要省略 @RequestBody 註解。
最後,讓我們在 Postman 中創建一個請求。 最簡單的方法是使用逗號符號(‘,’)分隔值:
然而,這種方法可能會在值包含逗號符號本身時導致問題。 我們可以通過分別設置每個值來解決此問題。 要將元素設置為 courses 數組,我們需要使用相同的鍵提供鍵值對:
數組中的元素順序將遵循請求中提供的順序。
此外,方括號是可選的。 另一方面,如果我們想在數組的特定索引處添加一個元素,則可以通過在方括號中指定索引來實現:
我們可以使用 cURL 請求測試我們的應用程序:
curl -X POST \
http://localhost:8080/students/simple \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'firstName=Jane&lastName=Doe&
courses[2]=Programming+in+Java&
courses[1]=Data+Structures&
courses[0]=Linux+Basics'3.2. 發送複雜數組對象
現在,讓我們來了解如何發送包含複雜對象的大數組。
首先,讓我們定義 課程 類,該類將代表單個課程:
class Course {
private String name;
private int hours;
// getters and setters
}接下來,我們將創建一個用於表示學生的類:
class StudentComplex {
private String firstName;
private String lastName;
private Course[] courses;
// getters and setters
}讓我們在控制器類中添加一個新的端點:
@PostMapping(
path = "/complex",
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public ResponseEntity<StudentComplex> createStudentComplex(StudentComplex student) {
return ResponseEntity.ok(student);
}最後,讓我們在 Postman 中創建一個請求。 類似於之前的示例,要向數組添加元素,我們需要使用相同的鍵提供鍵值對:
在這裏,帶有索引的方括號是必填項。 要將值設置為每個實例變量,我們需要使用點(‘.’)運算符,後跟變量的名稱。
再次,我們可以使用 cURL 請求測試端點:
curl -X POST \
http://localhost:8080/students/complex \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'firstName=Jane&lastName=Doe&
courses[0].name=Programming+in+Java&
courses[0].hours=40&
courses[1].name=Data+Structures&
courses[1].hours=35'4. 結論
在本文中,我們學習瞭如何正確地在服務器端設置 Content-Type 以避免 Unsupported Media Type 錯誤。 此外,我們還解釋瞭如何使用 x-www-form-urlencoded 內容類型在 Postman 中發送簡單和複雜數組。