我有JSON模式文件,其中一个属性被定义为string或null:
"type":["string", "null"]
Run Code Online (Sandbox Code Playgroud)
转换为YAML(与OpenAPI/Swagger一起使用)时,它变为:
type:
- 'null'
- string
Run Code Online (Sandbox Code Playgroud)
但Swagger编辑器显示错误:
架构"类型"键必须是字符串
在OpenAPI中定义可空属性的正确方法是什么?
Swashbuckle.AspNetCore v6.0.7在asp.net core项目中使用net5.0。
假设我有这样的模型:
public enum MyEnum
{
A, B
}
Run Code Online (Sandbox Code Playgroud)
和
public class MyModel
{
public MyEnum MyEnum { get; set; }
public MyEnum? MyEnum2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
swagger schema 的生成如下:
"MyEnum": {
"enum": [
"A",
"B"
],
"type": "string"
},
"MyModel": {
"type": "object",
"properties": {
"myEnum": {
"$ref": "#/components/schemas/MyEnum"
},
"myEnum2": {
"$ref": "#/components/schemas/MyEnum"
}
},
"additionalProperties": false
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,开放 API JSON 模式之间MyEnum没有区别!MyEnum?
并且似乎可以为空的枚举没有正确地出现在模式中。
有谁知道我该如何解决这个问题?
最好的
如何将属性指定为null或引用?讨论如何使用jsonschema将属性指定为null或引用.
我希望以昂首阔步的方式做同样的事情.
回顾上面的答案,使用jsonschema,可以这样做:
{
"definitions": {
"Foo": {
# some complex object
}
},
"type": "object",
"properties": {
"foo": {
"oneOf": [
{"$ref": "#/definitions/Foo"},
{"type": "null"}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
答案的关键是使用oneOf.
我的问题的关键点:
我有一个复杂的对象,我想保持DRY,所以我把它放在一个定义部分,以便在我的swagger规范中重用:其他属性的值; 响应对象等
在我的规范中的各个地方,属性可能是对此类对象的引用或为null.
如何使用不支持的Swagger oneOf或
anyOf?
注意:一些swagger实现使用x-nullable(或某些)指定属性值可以为null,但是,$ref 用它引用的内容替换该对象,因此它将显示任何使用x-nullable被忽略.