java - 如何在 swagger.json 中传递 formData 进行 POST 请求?

标签 java playframework swagger

在我的 play 框架应用程序中,我已在路由文件中将 API 注册为:

POST /api/rmt-create-request controllers.Api.CreateRMTRequestForm

在 Controller 的操作中,我使用以下代码来访问通过表单提交提交的 formData:

public Result CreateRMTRequestForm()
    {
        Map<String, String[]> params = request().body().asMultipartFormData().asFormUrlEncoded();

当我使用 forntend 应用程序提交表单时,它作为 API 工作正常。

我正在尝试使用 swagger.ui 创建 API 文档,其中在 swagger.json 文件中我编写了以下 JSON 数据。

"paths": {"/api/rmt-create-request": {
      "post": {
        "tags": [
          "RMT APIs"
        ],
        "description" : "Return newly created request data",
        "operationId": "create-new-rmt-request",
        "consumes": ["application/x-www-form-urlencoded"],
        "parameters": [
          {
            "name": "rootNodeName",
            "in": "formData",
            "description": "Root node class name for item",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rmt-request-data"
                }
              }
            }
          },
          "default": {
            "$ref": "#/components/responses/default"
          }
        }
      }
    },

在检查RequestHeader数据时,它没有显示值为'multipart/form-data'的content-Type属性,并且没有附加formData,这使得 Controller 抛出空异常。

任何人都可以帮助解决 swagger.json 文件中缺少的内容吗?

最佳答案

您正在混合 OpenAPI 2.0 和 3.0 语法。

在 OpenAPI 3.0 中,请求正文(包括表单数据)是使用 requestBody 定义的。关键字而不是 in: formData 参数。

此外,OAS3 不使用consumes。操作使用的媒体类型在 requestBody 内指定。

"paths": {
  "/api/rmt-create-request": {
    "post": {
      "tags": [
        "RMT APIs"
      ],
      "description": "Return newly created request data",
      "operationId": "create-new-rmt-request",
      "requestBody": {
        "content": {
          "multipart/form-data": {    // or  "application/x-www-form-urlencoded" - depending on what you need
            "schema": {
              "type": "object",
              "properties": {
                "rootNodeName": {
                  "type": "string",
                  "description": "Root node class name for item"
                }
              }
            }
          }
        }
      }
    }
  }
}

更多信息:Describing Request Body

关于java - 如何在 swagger.json 中传递 formData 进行 POST 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59388844/

相关文章:

java - 无法显示字符串

java - JFreechart 实时组合图 - 如果未收到数据点,则渲染步骤子图的前一个值

java - 每个 servlet 一个 Lettuce Redis 连接?

java - 使用扫描仪读取输入;输出被打印两次

java - 无法运行 "play"命令

java - API 网关 (spring-cloud-starter-gateway) 中的 Swagger API 文档不起作用(Whitelabel 错误页面)

java - 如何将所有 OPTION 请求映射到游戏 2 中的某个 Controller ?

java - 尝试创建新的数据库 Play Framework ebean mysql 时出现错误

java - Micronaut(Gradle 和 Java)-启用安全性后无法访问 Swagger 集成 View

swagger - 在 swagger 文档中使用对象类型查询参数