【问题标题】:Swagger 2: use enum reference in query parameter of array typeSwagger 2:在数组类型的查询参数中使用枚举引用
【发布时间】:2017-01-13 16:48:06
【问题描述】:

无法了解如何使用字符串类型的引用与数组参数中的枚举值。 我可以在 items 键中进行引用并且它正在工作,但是 Swagger 产生错误:不是有效的参数定义

Web UI 生成界面,但它有文本区域而不是我预期的多选框。

正确的做法是什么?

我的代码:

    swagger: '2.0':
    paths:
      /test:
        get:
          parameters:
          - in: origin
            name: status
            description: Origin
            required: false
            schema:
              type: array
              items:
                $ref: '#/definitions/Origin'
            collectionFormat: pipes'
    definitions:
      Origin:
        type: string
        description: Campaign origin
        enum:
          - one
          - two
    externalDocs:
      description: Find out more about Swagger
      url: http://swagger.io
    host: virtserver.swaggerhub.com
    basePath: /

【问题讨论】:

    标签: swagger swagger-ui swagger-2.0


    【解决方案1】:

    在 OpenAPI/Swagger 2.0 中,items 包含 $ref 的数组参数是 not supported。但在下一个版本 3.0 中看起来像 this will be possible。目前有几种解决方法,请参见下文。

    您的规范还有一些其他问题:

    • in: origin 无效。 in 关键字指定参数位置(路径、查询、标题等),并且只接受 OpenAPI/Swagger 规范中的某些值。我猜你的意思是in: queryin: header

    • 错别字(或复制粘贴错误?):swagger: '2.0': 末尾有一个额外的 :collectionFormat: pipes' 末尾有一个额外的 '


    让数组参数包含枚举值的一种解决方案是定义枚举内联:

          parameters:
            - in: query
              name: status
              description: Origin
              required: false
              type: array
              collectionFormat: pipes
              items:
                type: string
                enum:
                  - one
                  - two
    

    另一个解决方案(找到here)是使用 YAML 锚来引用枚举。这是 YAML 的一项功能,您可以使用 &anchor-name 标记密钥,然后进一步向下使用 *anchor-name 来引用该密钥的值。

    definitions:
      Origin:
        type: string
        description: Campaign origin
        enum: &origin
          - one
          - two
    
    paths:
      /test:
        get:
          parameters:
            - in: query
              name: status
              description: Origin
              required: false
              type: array
              collectionFormat: pipes
              items:
                type: string
                enum: *origin
    

    【讨论】:

    • 我遇到了同样的问题。项目生成的 Swagger.json 返回相同的错误,因为项目具有 $ref。你能帮我如何删除 $ref 并在 c# 中添加枚举吗?项目是net core 3.1。
    【解决方案2】:

    一种选择是定义一个参数并对其进行引用:(我在查询定义中使用引用 ($ref:) 时遇到问题)

    paths:
      /path:
        get:
          operationId: controllers.controller
          parameters:
            **- $ref: '#/parameters/SPEC'**
    
    
    parameters:
      SPEC:
    

    【讨论】:

      猜你喜欢
      • 2015-11-22
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 2016-09-13
      • 2021-12-01
      • 2013-12-13
      • 1970-01-01
      • 2015-02-27
      相关资源
      最近更新 更多