node.js上swagger中的可空字段

Rod*_*257 14 node.js swagger swagger-ui swagger-editor

我花了很多时间试图找到在Node.JS中创建swagger文档的解决方案.主库是swagger-node,在其中创建一个swagger yaml文件,然后将控制器添加到它.它会自动在您的应用中提供swagger ui文档,并根据您在yaml中指定的模型对请求和响应进行验证.

这很整洁,但是我要求我希望明确能够返回或接受某些字段null作为值,例如:

{ 
  id: 123,
  description: "string",
  date_sent: null
}
Run Code Online (Sandbox Code Playgroud)

我不想删除date_sent密钥,我想明确地将其声明为null.

swagger规范不支持anyOfJSON模式通常如何做到这一点我相信.

我想知道是否有解决方法?也许某些库可用于具有x-nullable可以添加的供应商特定标志的节点,或者某种方式指定我的非必需字段应该都可以为空.

我是否必须自己写一些带有我的swagger文件的东西,然后在验证器中间件运行之前修改它,或者是否有某些可以建议的解决方法?

Naz*_*gol 14

nullableOpenAPI(fka Swagger)规范v3.0.0中支持字段,但不支持v2.0.可空类型定义如下:

# Can be string or null
type: string
nullable: true
Run Code Online (Sandbox Code Playgroud)


Ser*_*giy 12

SwaggerUI不支持可空类型(请参见此处).但是我使用了可以为空的属性:

type: ['string','null']
Run Code Online (Sandbox Code Playgroud)

之后,此属性从UI中消失,但验证仍然有效.

  • 顺便说一句,这不是一个有效的Swagger类型定义. (3认同)
  • 啊哈!我试过这个,但是在yaml中我做了`string`和`null`但是你必须在`'null'`周围加上引号才能使它工作.谢谢!此外,如果你添加一个'默认'然后它会再次出现在示例值中,我想它只是不知道哪一个用作示例 (2认同)

小智 5

您可以使用默认属性代替在 type 属性中添加 null 。

Swagger.json 属性定义示例:

"due_date": {
  "type": "string",
  "description": "Due date",
  "default": "null"
},
Run Code Online (Sandbox Code Playgroud)

这是一个有效的 Swagger 类型定义,并且在 Swagger UI 中仍按预期显示。

  • 此定义仅有效,因为它使用字符串 `"null"`,而不是实际的 `null`。这不是 OP 想要的。 (3认同)