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