起因就是不知道post這個請求體中這些格式有什么區別,后端又怎么去接收這些不同格式的內容
Get請求
get請求是比較簡單的一類
正常的直接用參數接收(不寫的話名字要匹配)或者@RequestParam都可以接收,用對象綁定也可以
resultful請求有所不同
Get-resultful格式請求 @PathVariable
@RequestMapping("/info/{id}") // 未指定 HTTP 方法,默認支持所有方法
public R info(@PathVariable("id") Long id) {SkuFullReductionEntity skuFullReduction = skuFullReductionService.getById(id);return R.ok().put("skuFullReduction", skuFullReduction);
}
post請求
post請求和其他的PUT,DELETE等請求都一樣只有GET和他們不一樣
📌 1. application/x-www-form-urlencoded(表單默認格式)
數據以 key=value 形式編碼,用 & 分隔,例如:
username=John&age=25
適用于 簡單鍵值對,不支持文件上傳。
后端接收方式
? 使用 @RequestParam 或直接綁定到方法參數
@PostMapping("/submit")
public String submitForm(@RequestParam("username") String username, // 單個參數接收@RequestParam("age") int age
) {// 業務邏輯
}// 或者自動綁定到對象
@PostMapping("/submit")
public String submitForm(UserForm form) { // UserForm 需有 username 和 age 屬性// 業務邏輯
}
📌 2. multipart/form-data(表單文件上傳)!!!
為什么在apifox都是鍵值對的形式,感覺這個請求體就很奇怪吶,不是鍵值對(和1不同),一句話說就是不讓用戶考慮底層實現,方便快捷,apifox會封裝成這種形式發送
其實2就比1多一個文件上傳功能,就是可以傳文件
相當于既可以傳文件也可以傳string普通鍵值
后端接收
@RequestParam接收普通鍵值
@RequestPart接收文件類型
@PostMapping("/upload")
public String handleUpload(@RequestParam("username") String name, // 文本字段@RequestPart("avatar") MultipartFile file // 文件字段
) {// 1. 獲取文本字段System.out.println("用戶名:" + name); // 輸出:John// 2. 處理文件file.transferTo(new File("/uploads/" + file.getOriginalFilename()));return "上傳成功!";
}
📌 3. application/json(JSON 數據)!!!
數據格式
數據以 JSON 格式傳輸,例如:
{"username": "John","age": 25,"hobbies": ["coding", "reading"]
}
后端接收方式
? 使用 @RequestBody + DTO 對象
@PostMapping("/create")
public String createUser(@RequestBody UserDTO userDTO) {// userDTO 會自動反序列化為 Java 對象// 例如 userDTO.getUsername() 返回 "John"
}// DTO 示例
public class UserDTO {private String username;private int age;private List<String> hobbies;// getters/setters
}
json數組/簡單數組
前端payload
[{"catId":23,"sort":0},{"catId":22,"sort":1,"parentCid":1,"catLevel":2},{"catId":24,"sort":2}]
后端這樣就可以接收到對應的參數
注解使用 @RequestBody 也算json數據
public R updateSort(@RequestBody CategoryEntity[] category)
簡單數組也可以這樣,相當于一個值就是一個json字符串唄
📌 4. application/xml(XML 數據)
數據格式
數據以 XML 格式傳輸,例如:
<user><name>John</name><age>25</age>
</user>
后端接收方式
? 使用 @RequestBody + JAXB 注解對象(需配置 XML 解析器)
@PostMapping("/xml")
public String handleXml(@RequestBody UserXml userXml) {// userXml.getName() 返回 "John"
}// XML 映射對象
@XmlRootElement
public class UserXml {private String name;private int age;// getters/setters
}
📌 5. binary data(二進制流)
數據格式
數據為原始二進制(如圖片、PDF、音頻等),例如:
(文件的二進制流...)
后端接收方式
? 使用 InputStream 或 byte[]
@PostMapping("/binary")
public String handleBinary(InputStream dataStream) {// 手動讀取流數據
}// 或者直接接收字節數組
@PostMapping("/binary")
public String handleBinary(@RequestBody byte[] data) {// 直接操作字節數組
}