首页 文章

如何在swagger ui中输入嵌套数组的数据

提问于
浏览
2

我正在使用asp.net webapi 2构建一个web api,对于我的文档,我选择了昂首阔步 .

我遇到的问题是我的一个api方法采用嵌套数组(另一个数组中的字符串数组) . 当在邮递员中手动测试时,当我键入这样的内容时它很有效:

http:/localhost:port/setup?array[0]=key1&array[0]=value1&array[1]=key2&array[1]=value2

但是在swagger-ui我输入一个字段,每行只有一个参数 . 这使我无法为每个嵌套数组输入两个值 .

结果应该像这样(json):

[["key1","value1"],["key2","value2"]]

我已经能够用上面的查询参数实现 . 虽然我只能在swagger-ui文本字段中实现以下功能:

[["key1"],["value1"],["key2"],["value2"]]

我已经为互联网吸尘了1-2个小时,但只能找到询问如何在yaml文件中定义嵌套数组的帖子 . 我在swagger github上读过的一些差事让我觉得根本不可能 . 虽然它不是一个关键功能,但如果所有测试都按预期工作将会非常好 .

所以问题是,如果可能的话,我如何在swagger-ui中的嵌套数组中键入两个单独的字符串 .

我不是这方面的专家 . 我本周学会了如何使用json api和swagger,所以请在回顾这一点时考虑到这一点 .

提前致谢!

1 回答

  • 0

    嵌套数组很简单:

    type: array
    items:
      type: array
      items: 
        type: string
    

    但OpenAPI / Swagger没有办法在查询字符串中序列化嵌套数组,就像在您的示例中一样 .

    如果数组具有固定数量的项,则可能的解决方法是将每个嵌套数组定义为单独的查询参数:

    paths:
      /setup:
        get:
          parameters:
            - in: query
              name: array[0]
              required: true
              type: array
              items:
                type: string
              collectionFormat: multi   # array[0]=key1&array[0]=value1
            - in: query
              name: array[1]
              required: true
              type: array
              items:
                type: string
              collectionFormat: multi   # array[1]=key2&array[1]=value2
    

    更好的方法是使用POST请求并在请求正文中传递数组:

    paths:
      /setup:
        post:
          consumes:
            - application/json
          parameters:
            - in: body
              name: body
              required: true
              schema:
                type: array
                items:
                  type: array
                  items: 
                    type: string
    

相关问题