【问题标题】:Can properties and additionalProperties take on null value in Swagger 2.0?属性和附加属性可以在 Swagger 2.0 中取空值吗?
【发布时间】:2018-10-07 13:19:48
【问题描述】:
"DogRequest"{
  "type": "object",
  "properties": {
    "height": {
      "type": "string"
     }
  }
}


"DogResponse"{
  "type": "object",
  "properties": {
    "bark": {
      "type": "string"
     }
  }
}

请注意,我没有定义任何必需的属性。

我注意到在提出请求时,我可以设置 height=None

但是,在我的回复中,如果 bark=None,swagger 会引发验证错误,即 None 不是“字符串”类型。

让属性(和附加属性)为空的规则是什么,即使它们没有按要求定义?

我确实注意到,对于按要求定义的属性,它们必须存在且不为空。如果我想让属性为空,我必须包含“x-nullable”:true。

对于不需要的属性,我是否必须包含 "x-nullable": true ?

为什么我看到不一致?

【问题讨论】:

标签: jsonschema swagger-2.0 openapi


【解决方案1】:

OpenAPI 2.0 不支持 null 作为数据类型。一些工具使用x-nullable: true 来处理空值,但它不是 OpenAPI 规范的一部分,因此它是否有效取决于您使用的工具。

OpenAPI 3.0 中添加了对null 的支持,其中属性可以标记为nullable: true

【讨论】:

  • 啊,我明白了。使用 Swagger 2.0 所以 x-nullable: true 有效。但是,您知道为什么我在发送请求时看到 null 是可以的,但在收到响应时就不行了吗?出于某种原因,在请求中发送 bark=None 不会引发任何验证错误,并且我不需要添加 x-nullable: true...
  • @aabb 没有看到你的实际代码很难说,这可能取决于你使用的框架/库(有lots of libraries,它们的功能可能不同)。也许您的框架/库会根据 OpenAPI 定义验证响应,但不会验证请求。也许在序列化请求时,它不包括请求中的None 值。或类似的东西。
猜你喜欢
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多