【问题标题】:Postman: "Invalid data type. Must be either, array, boolean, number" error邮递员:“无效的数据类型。必须是数组、布尔值、数字”错误
【发布时间】:2021-09-19 16:34:31
【问题描述】:

在 Postman 中创建 API 时出现以下错误:“数据类型无效。必须是数组、布尔值、整数、数字、对象或字符串中的任何一个

"type": "file" 转换为"type": "object" 时,错误已修复,但我不确定是否有适合这种情况的方法。因为这次更新后,在 Postman 中发送请求时,请求可能无法通过。

"parameters": [
  {
      "in": "body",
      "name": "file",
      "description": "file",
      "required": false,
      "schema": {
          "type": "array",
          "items": {
              "type": "file"
          }
      }
  },
  ...
]

那么,我该如何解决 Postman 中的问题?

【问题讨论】:

    标签: swagger postman openapi postman-collection-runner postman-pre-request-script


    【解决方案1】:

    问题不在于 Postman,而在于 API 定义。 "type": "file" 不是用于架构和正文参数的有效类型值,此类型只能用于in: formData 参数。

    另一方面,我在尝试通过 Postman 测试我的应用时没有添加文件。因此,我只想抑制错误

    在这种情况下,您可以将 "type": "file" 更改为 "type": "string" 以抑制导入错误。或者从 API 定义中删除整个有问题的操作。


    如何在 OpenAPI 中正确定义文件上传

    API 定义试图描述文件数组的上传 - 但 OpenAPI 2.0 (swagger: '2.0') 不支持此功能。 OAS2 仅支持通过multipart/form-data 上传单个命名文件,在这种情况下,API 定义如下所示:

    {
      "swagger: "2.0",
      ...
    
      "paths": {
        "/something": {
          "post": {
            "consumes": [
              "multipart/form-data"
            ],
            "parameters": [
              {
                "in": "formData",
                "name": "file1",
                "type": "file"    // A single file sent via form field "file1"
              },
              {
                "in": "formData",
                "name": "file2",
                "type": "file"    // Another file sent via form field "file2"
              }
            ]
            ...
    }
    

    上传文件数组是supported in OpenAPI 3

    {
      "openapi": "3.0.0",
      ...
    
      "paths": {
        "/something": {
          "post": {
            "requestBody": {
              "content": {
                "multipart/form-data": {
                  "schema": {
                    "type": "object",
                    "properties": {
                      "file": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "format": "binary"
                        }
                      }
                    }
                  }
                }
              }
            },
            ...
    
          }
        }
      }
    }
    

    【讨论】:

    • 非常感谢这些完美的解释,投了赞成票。在这个场景中,我应该使用object 还是text 而不是file 值?因为我尝试在consumes部分将"application/json"更新为"multipart/form-data",但是问题没有解决。
    • 您不仅需要更改consumes,还需要将"in": "body" 参数替换为一个或多个"in": "formData" 参数,如我的第一个示例所示。但它可能无论如何都不会达到预期的结果,因为它不是文件数组而是 N 个单独的文件参数。 OpenAPI 2 根本不支持文件数组。正确的解决方案是将您的 OpenAPI 2.0 文件转换为 OpenAPI 3.0,修复我的第二个示例中的 requestBody 定义,然后将固定的 OpenAPI 3.0 文件与 Postman 一起使用。
    • 其实我没有机会使用 OpenAPI v3.0,我必须继续使用 OpenAPI v2.0。另一方面,我在尝试通过 Postman 测试我的应用程序时不添加文件。出于这个原因,我只想抑制错误并想知道什么是最正确的方法。在这个场景中,你有什么建议?
    • 在这种情况下,您可以将"type": "file" 更改为"type": "string",或者完全删除有问题的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多