起因就是不知道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) {// 直接操作字节数组
}