HTTP协议-后端接收请求

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小袁拒绝摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值