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

Swagger:无法设置“collectionFormat”

於宾白
2023-03-14

JSON查询应该可以使用多个搜索参数。为此,服务器需要获取每个参数作为搜索对象,例如:

url/search=FirstParameter[EQ]foo&search=SecondParameter[EQ]bar

我们在swagger中使用下面的声明:

 parameters:
searchParam:
  description: |
    array of strings like e.g. person.nameLast[\<operand>]Bur<br>
    \<operands> \:= LEQ, LT, EQ, GT, GEQ, LIKE
  name: search
  in: query
  schema:
    type: array
    writeOnly: true
    items:
      minItems: 1
      type: string

问题是,从swagger生成的PHP库创建的请求如下:

url/search=FirstParameter[EQ]foo&SecondParameter[EQ]bar

这是服务器无法使用的。为了解决这个问题,我发现可以通过将属性“collectionFormat”设置为csv而不是multi来影响这个行为。

我的问题是,声明取自示例页面https://swagger.io/docs/specification/2-0/describing-parameters/

不工作并显示错误:

不应具有附加属性additionalProperty:collectionFormat

我试过了:

parameters:
searchParam:
  description: |
    array of strings like e.g. person.nameLast[\<operand>]Bur<br>
    \<operands> \:= LEQ, LT, EQ, GT, GEQ, LIKE
  name: search
  in: query
  schema:
    type: array
    collectionFormat: csv
    writeOnly: true
    items:
      minItems: 1
      type: string

问题可能是什么?

共有1个答案

訾高飞
2023-03-14

collectionFormat是一个OpenAPI 2.0关键字(即在swagger中使用:“2.0”),但你似乎正在使用OpenAPI 3.0(openapi:3.0.x)。对应的 OAS3 关键字为样式分解,有关详细信息,请参阅参数序列化指南。

尝试以下操作:

paths:
  /url:
    get:
      parameters:
        - in: query
          name: search
          description: |-
            An array of strings like e.g. `person.nameLast[<operand>]value`
            
            &lt;operand> can be: LEQ, LT, EQ, GT, GEQ, LIKE

          schema:
            type: array
            minItems: 1   # This keyword must be on the same level as `type: array`
            items:
              type: string

          # Optional example
          example:
            - FirstParameter[EQ]foo
            - SecondParameter[EQ]bar

          # This is the default serialization style for query parameters
          # so you can omit these keywords if you wish
          style: form
          explode: true

请注意,发送请求时会将< code>[和< code>]字符百分比编码为< code>[和< code>],因为根据RFC 3986,它们是保留字符。

url?search=FirstParameter%5BEQ%5Dfoo

后端服务器应该将<code>〔…〕

 类似资料:
  • 我试图使用“swagger jaxrs maven”插件从源代码生成RESTful API文档。 我关注了这个网站:swagger-jaxrs-maven 但是maven抱怨它找不到这个插件,所以我在maven中央存储库中搜索了它 它只在groupId com下找到它。绿色意见。大摇大摆所以我做了相应的修改。 但现在我发现了这个错误: [错误]无法执行目标com。绿色意见。招摇过市:jaxrs g

  • 我已经按照下面的链接使用spring的Swagger为我的REST服务创建API文档。 http://jakubstas.com/spring-jersey-swagger-configuration/#comment-1726 一切都很顺利,但当我试图使用url http://localhost:8080/rest/api-docs访问swagger的api文档时,我发现无法读取swagger

  • 问题内容: 我正在尝试在Django中开发示例项目,并且在运行syncdb命令时遇到错误。 这是我的项目结构的样子: / Users / django_demo / godjango / bookings: 我的manage.py文件如下: 我的PYTHONPATH和DJANGO_SETTINGS_MODULE设置如下 我的WSGI.py文件如下所示: 当我运行python manage.py s

  • 我试图在具有动态输入字段的pdf表单中设置值,但流编写器不断出错。 我研究了填写表格(http://mail-archives.apache.org/mod_mbox/pdfbox-users/201510.mbox/browser)的步骤,并阅读了类似的问题结合XFA与PDFBox和PDFBox臃肿的PDF文件大小 有什么不同的方法吗?有什么建议可以引导我走向正确的方向吗? 这是我的代码 这就是

  • 我在设置kubernetes ingress-nginx时遇到了麻烦,以便在外部公开我的应用程序。下面是我所做的步骤: 应用程序部署: 创建了名为Ingress的命名空间 部署了statefulset集资源,用于在入口命名空间中描述我的应用程序(我们称之为testapp) 创建了ClusterIP服务,使我的应用程序在kube集群(testapp)中的入口命名空间中可用 入口nginx设置: nu

  • 我正在尝试执行以下操作以避免稍后未选中的转换: 强制取消行上未选中得强制转换: 我如何做到这一点而不需要抑制?