网站首页 > 博客文章 正文
概述
在本教程中,我们将学习使用 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 计算机网络-应用层-万维网
你 发表评论:
欢迎- 368℃用AI Agent治理微服务的复杂性问题|QCon
- 364℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 347℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 345℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 343℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)