当前位置: 首页 > 知识库问答 >
问题:

Swagger 2:在数组类型的查询参数中使用枚举引用

艾凌龙
2023-03-14

无法获取如何将字符串类型的引用与数组参数中的枚举值一起使用。我可以在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: /

共有2个答案

夏雅志
2023-03-14

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

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


parameters:
  SPEC:
谢俊英
2023-03-14

包含$ref的数组参数在 OpenAPI/Swagger 2.0 中不受支持。但看起来这在下一个版本 3.0 中是可能的。目前有几种解决方法,请参见下文。

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

> < li>

in: origin无效。< code>in关键字指定参数位置(路径、查询、头等。)并且根据OpenAPI/Swagger规范只接受某些值。我猜你指的是< code>in: query或< code>in: header。

打字(或复制粘贴错误?):swagger:“2.0”:在末尾有一个额外的,而collectionFormat:pipes““

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

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

另一种解决方案(可在此处找到)是使用YAML锚来引用枚举。这是YAML的一个特性,您可以在其中使用标记键

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

 类似资料:
  • 我的Spring启动应用程序中的API具有类型的查询参数。从邮递员那里,它只接受字符串值。当作为查询参数值发送时,它会以400作为整数响应。如何配置Spring启动应用程序以接受Enum字符串值或Enum索引/序号值作为查询参数。 下面两种方法都应该有效 <代码> 我正在使用Java,spring boot fw。它在dotNet中运行良好

  • 问题内容: 在阅读有效的Java时,我遇到了“使用枚举而不是常量”的建议。在当前项目中,我正在执行与以下类似的操作: 我将如何使用枚举来实现此目的?由于必须使用该接口,因此必须为索引使用。上面的例子只是一个例子。我实际上正在使用一个for索引值的API 。 问题答案: 将一种有用的模式与一种反模式一起应用通常会失败;-) 在您的情况下,如果要用值替换常量,则将数组用于非真正的类数组数据会带来问题。

  • 我想使用中定义的枚举作为查询字符串中参数定义的一部分。 我在我的Swagger 2.0规范文件的< code>definitions部分定义了Swagger枚举。 我可以在其他定义中创建对它的引用: 当参数在:body中为中为

  • 我希望能够使用此枚举定义: ...然而,在参数定义内部,我不断得到错误: 错误: Swager错误:不是有效的参数定义