提问者:小点点

为什么OpenAPI 3 oneOf示例对象并不总是对两种模式有效


https://swagger.io/docs/specification/data-models/oneof-anyof-allof-not/#oneof中oneOf关键字的规范有一个示例模式和三个示例对象。请求体是oneOf the Dog或Cat模式:

Dog:
  type: object
  properties:
    bark:
      type: boolean
    breed:
      type: string
      enum: [Dingo, Husky, Retriever, Shepherd]
Cat:
  type: object
  properties:
    hunts:
      type: boolean
    age:
      type: integer

三个JSON对象:

对象1

{
  "bark": true,
  "breed": "Dingo" 
}

对象2

{
  "bark": true,
  "hunts": true
}

对象3

{
  "bark": true,
  "hunts": true,
  "breed": "Husky",
  "age": 3      
}

他们说,第一个对象对其中一个模式有效(我假设他们指的是Dog模式),第二个对象对两个模式都无效,第三个对象对两个模式都有效。这意味着第二个和第三个对象不是正确的请求体。

但是为什么不是所有三个对象都对两个模式有效呢?这里提到的对象的关键字http://json-schema.org/draft/2020-12/json-schema-validation.html#name-validation-keywords-for-obj都没有使用。并且属性的类型匹配所有对象。

我https://www.jsonschemavalidator.net/使用这个验证器,还编写了一个简单的模式,其中包含一个具有一些属性的对象,甚至一个空的json验证模式。


共1个答案

匿名用户

似乎我的假设是正确的,所有对象都对oneOf模式有效。我发现了一个报告问题:https://github.com/swagger-api/swagger.io/issues/253.