相关疑难解决方法(0)

如何在OpenAPI(Swagger)中定义一个可以是字符串或null的属性?

我有JSON模式文件,其中一个属性被定义为stringnull:

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

转换为YAML(与OpenAPI/Swagger一起使用)时,它变为:

type:
  - 'null'
  - string
Run Code Online (Sandbox Code Playgroud)

但Swagger编辑器显示错误:

架构"类型"键必须是字符串

在OpenAPI中定义可空属性的正确方法是什么?

swagger openapi

29
推荐指数
1
解决办法
1万
查看次数

Swashbuckle.AspNetCore openapi 架构中未正确显示可空属性

Swashbuckle.AspNetCore v6.0.7asp.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?

并且似乎可以为空的枚举没有正确地出现在模式中。

有谁知道我该如何解决这个问题?

最好的

c# swagger asp.net-core swashbuckle.aspnetcore

8
推荐指数
1
解决办法
7142
查看次数

如何指定属性可以为null或带有swagger的引用

如何将属性指定为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.

我的问题的关键点:

  1. 我有一个复杂的对象,我想保持DRY,所以我把它放在一个定义部分,以便在我的swagger规范中重用:其他属性的值; 响应对象等

  2. 在我的规范中的各个地方,属性可能是对此类对象的引用或为null.

如何使用不支持的Swagger oneOfanyOf

注意:一些swagger实现使用x-nullable(或某些)指定属性值可以为null,但是,$ref 它引用的内容替换该对象,因此它将显示任何使用x-nullable被忽略.

swagger swagger-2.0

6
推荐指数
3
解决办法
7505
查看次数