网站首页 > 博客文章 正文
概述
在本教程中,我们将学习使用 Postman 通过x-www-form-urlencoded提交数组
W3C 委员会定义了多种格式,我们可以使用这些格式通过网络层发送数据。这些格式包括 form-data、raw 和 x-www-form-urlencoded 数据。默认情况下,我们使用最后一种格式发送数据。
x-www-form-urlencoded
下面列出的数据格式描述了在 HTTP 消息正文中作为数据块发送的表单数据。它发送一个编码的表单数据提交给服务器。编码数据具有键值对的格式。服务器必须支持对应的content-type。
使用此content-type提交的表单必须符合以下编码模式:
- 键值对需要转义
- ‘,’ 符号分隔多个值
- “+”符号替换空格字符
- 保留字符应遵循 RFC 17.38 符号
- 所有非字母数字字符都使用URL编码
- 键与值用等号('=')隔开,键值对用和号('&')隔开
此外,数据的长度并没有指定。但是,使用 x-www-form-urlencoded 数据类型有数据限制。因此,服务器将拒绝超过配置中指定大小的请求。
此外,发送二进制数据或包含非字母数字字符的值时,效率比较低。 包含非字母数字字符的键和值采用百分比编码(也称为 URL 编码),因此这种类型不适用于二进制数据。 因此,我们应该考虑改用 form-data 内容类型。
此外,我们不能用它来编码文件。 它只能对 URL 参数或请求正文中的数据进行编码。
- 发送数组
要在 Postman 中使用 x-www-form-urlencoded 类型,我们需要在请求的正文选项卡中选择同名的单选按钮。
如前所述,请求由键值对组成。 Postman 在将数据发送到服务器之前会对数据进行编码。 此外,它将对键和值进行编码。
现在,让我们看看如何在 Postman 中发送一个数组。
发送简单数组对象
我们将首先展示如何发送一个包含简单对象类型的简单数组对象,例如字符串。
首先,让我们创建一个将数组作为实例变量的 Student 类:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
class Man {
private String name;
private String gender;
private String[] hobbies;
}
其次,我们将定义一个控制器暴露rest接口:
@RestController
@RequestMapping("/test/20221101")
public class TestSendArrayController {
@PostMapping(
path = "/send/array",
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public ResponseEntity<Man> sendAray(Man man) {
return ResponseEntity.ok(man);
}
}
当我们使用 consume 属性时,我们需要将 x-www-form-urlencoded 定义为控制器将从客户端接受的媒体类型。 否则,我们将收到 415 Unsupported Media Type 错误。 此外,我们需要省略 @RequestBody 注释,因为该注释不支持 x-www-form-urlencoded 内容类型。
最后,让我们在 Postman 中创建一个请求。 最简单的方法是使用逗号分隔值:
但是,如果值包含逗号符号本身,这种方法可能会导致问题。 我们可以通过单独设置每个值来解决问题。 把key设置为数组,我们需要使用相同的键提供键值对:
数组中元素的顺序将遵循请求中提供的顺序。
此外,方括号是可选的:
另一方面,如果我们想向数组中的特定索引添加一个元素,我们可以通过在方括号中指定索引来实现:
发送复杂数组对象
现在,让我们看一下发送包含复杂对象的数组的方式。
首先,让我们定义代表爱好的Hobby类:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
class Hobby {
private String name;
private String cost;
}
接下来,我们将创建一个代表人的类:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ComplexMan {
private String name;
private String gender;
private Hobby[] hobbies;
}
让我们在控制器类中添加一个新接口:
@PostMapping(
path = "/send/complex-array",
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public ResponseEntity<ComplexMan> sendComplexArray(ComplexMan man) {
return ResponseEntity.ok(man);
}
最后,让我们在 Postman 中创建一个请求。 与前面的示例一样,要向数组添加元素,我们需要使用相同的键提供键值对:
在这里,带索引的方括号是强制性的。 要将值设置为每个实例变量,我们需要使用点 ('.') 运算符,后跟变量名。
结论
在本文中,我们学习了如何在服务器端设置 Content-Type 以避免出现 Unsupported Media Type 错误。 此外,我们还解释了如何在 Postman 中使用 x-www-form-urlencoded 内容类型发送简单和复杂的数组。
猜你喜欢
- 2025-01-02 在测试接口的时候,还在为token过期郁闷?
- 2025-01-02 小伙给同事爬取数据竟获取不到,竟要使用这种请求方式才能获取?
- 2025-01-02 历史上的今天大事件查询工具推荐 - 历史上的今天 API
- 2025-01-02 面试突击64:了解 HTTP 协议吗?
- 2025-01-02 总结的HTTP比较详细的知识
- 2025-01-02 什么是Http请求走私(Http Request Smugging)及如何发现?
- 2025-01-02 手机号码二要素核验API:提升数据准确性与安全性
- 2025-01-02 真不是吹,Spring 里这款牛逼的网络工具库你可能没用过
- 2025-01-02 详解HTTP协议基本结构
- 2025-01-02 计算机网络-应用层-万维网
你 发表评论:
欢迎- 最近发表
-
- 告别频繁登录!Nuxt3 + TS + Vue3实战:双Token无感刷新方案全解析
- SpringBoot实现单点登录(SSO)的4种方案
- 随机密聊 匿名聊天室程序源码(随机匿名聊天在线)
- SpringBoot大文件上传卡死?分块切割术搞定GB级传输,速度飙升!
- Java 微服务从源码实战开始 | Gitee 项目推荐
- 轻量级埋点sdk搭建,便捷更全面(埋点sdk是什么)
- Spring Boot 实现文件秒传功能(springboot上传文件到指定文件夹)
- 项目中不用redis分布式锁,怎么防止用户重复提交?
- SpringBoot项目日志打印traceId生成
- 如何实现PC端网站扫码登录操作?(网页 扫码)
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- flutterrun (59)
- 系统设计图 (58)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)