在关于参数序列化的OpenAPI文档中,有一个简短的部分是关于如何序列化具有不同样式的查询、路径、标头和cookie参数。这些参数的模式被描述为OpenAPI风格的json模式,它允许对象和数组的无限嵌套。我在文档中没有找到任何关于如何处理这些的内容:
https://swagger.io/docs/specification/serialization/
让我们假设为任何参数提供的JSON模式如下所示:
{
"type": "object",
"properties": {
"foo": {
"type": "object",
"properties": {
"bar": "string"
}
}
}
}
这意味着它允许JSON中的结构,例如:
{
"foo": {
"bar": "hello"
}
}
或者与嵌套数组类似的概念:
{
"type": "array",
"items": {
"type": "array",
"items": {
"type": "string"
}
}
}
它允许这样的结构(至少在JSON中):
[["a"], ["b"]]
我的问题:
我问这个是因为我正在开发需要与OpenAPI规范兼容的工具,我想知道我在这里能期望什么作为参数格式。我完全意识到拥有巨大的嵌套对象并尝试在url中序列化它们不是最聪明的主意。然而,我对OpenAPI规范允许的内容感兴趣。
OpenAPI spec 3.0/3.1支持JSON格式的参数序列化。它只是在你提到的那一页的末尾提到了。
来自OpenAPI规范3.0.3:
对于更复杂的情况,< code>content属性可以定义参数的媒体类型和架构。参数必须包含< code>schema属性或< code>content属性,但不能同时包含两者。
下面的OpenAPI片段显示了如何定义在问题中具有所需结构的查询参数:
parameters:
- name: objParam
in: query
content:
application/json:
schema:
type: object
properties:
foo:
type: object
properties:
bar:
type: string
- name: nestedArray
in: query
content:
application/json:
schema:
type: array
items:
type: array
items:
type: string
简短回答:这是未定义的行为。
大多数OpenAPI序列化样式都基于RFC 6570,它只为以下方面提供指导:
对于其他类型的值(嵌套对象、包含数组的对象、嵌套数组、对象数组),行为未定义。
类似地,OpenAPI自己的深度对象
样式目前仅针对简单对象定义,而不针对数组或嵌套对象定义。以下是OpenAPI规范作者/维护者的一些相关评论:
顺便问一下,我们不能让<code>deepObject</code>也用于数组有什么原因吗?[...]
达雷尔:按照你的描述支持数组是我的意图。我应该找到一些规范的实现来用作行为的指导方针,但没有抽出时间。
Ron:如果我们最终支持分解数组表示法,需要明确第一个索引是0(或1,或-1,或其他)。
(来源)
Ron:当我们在规范中定义deepObject
时,我们明确选择不提及当对象中有多个级别时会发生什么,但在我们的对话中,我们使用了“不支持”。
(来源)
有一个现有的功能请求来扩展 deepObject
以支持数组和嵌套结构:
支持具有 deepObject 样式的查询参数的深层对象
我正在尝试正确定义 OpenAPI 规范,以便从该规范生成 api 客户端。我已经解决了一个问题,即我们有一个复杂的查询对象,其中包含嵌套对象和对象数组,用于获取 GET 路由。 让我们以这些类为例。 和一个带有@Query decorator的get请求。 我得到的是。 我还尝试通过添加@ApiQuery装饰器来定义查询参数,它几乎可以工作。 - 但是现在我正在将重复的查询定义混入一个。有没有办
我正在为我的类开发一个简单的jsp/servlet/tomcat webapp。教授要求我们使用与默认动态web项目结构略有不同的文件夹结构。他不想使用webcontent文件夹,而是想要src/main/java和src/main/webapp下的所有源代码。 当我运行应用程序时,我的欢迎文件显示良好,但当我试图访问我的servlets时,我得到: ClassNotFoundException.
我正在用Swagger 2.0记录一个Rails应用程序,并使用Swagger-UI作为人类可读的文档/沙盒解决方案。 我有一个资源,客户端可以在其中存储任意元数据以供以后查询。根据 Rails 约定,查询将按如下方式提交: Rails将其转换为以下参数: 它可以很容易地用于为数据库生成适当的 子句。 Swagger里有支持这种东西的吗?我想最终让Swagger-UI提供一些方法来修改生成的请求,
我问了这个问题作为对另一个问题的评论,也在mongodb-user上发布了一个问题。到目前为止没有回复,所以我求助于问一个单独的问题。 文件说明: 如果字段包含一个数组,则$in操作符选择其字段包含数组的文档,该数组至少包含一个与指定数组中的值匹配的元素(例如,等等) 我正在使用: 在MongoDB外壳中: 下面是应根据文档及其生成的结果工作的查询列表: 为什么这个不行? 为什么我需要所有的钱?
我有一个这样的endpoint: 在这里,是向用户公布的关键字。但是和是任意参数。对于另一个资源,如,任意参数可以是。 在 openapi 规范中,我有 我正在使用代码生成插件 ,在服务器控制器中,我想捕获所有任意参数。如何扩展我的 openapi 规范以使参数超出。如果有一种方法可以在单个数组中获取所有查询参数,那也将有所帮助。
我正在研究spring boot数据mongoDB。我在查询包含特定对象列表的嵌套文档时遇到一些问题。 模拟课 请求类 示例JSON 所需的查询输出:传入endpoint、mockName、body、params和method 从数据库中获取mockName的mock对象 在返回的模拟的请求列表中匹配endpoint、主体、参数和方法 返回符合上述所有条件的请求的响应字段 从上面的例子json: