5

我正在尝试使用读取 OpenAPI 3.0 规范的 OpenAPI Generator 4.0.0-SNAPSHOT(我们的经理要求我们使用该版本)生成 Typescript 客户端。我们当前所有的端点要么接受查询字符串中的数据,要么接受表单主体的数据,并且它们都可以完美地工作。我有一个新端点,它将以 POST 正文中的 JSON 格式读取数据(其他端点最终也会被转换)。它将接受如下对象:

{email: "something@domain.com"}

我正在尝试在 YAML 中记录端点,如下所示:

 /users/send-password-reminder:
    post:
      [...]
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
      responses:
        [...]

但是,当我生成 Typescript 客户端时,它会生成一个SendPasswordReminderRequest对象,该对象包装了一个自动生成的InlineObject1对象,该对象包装了我实际email的 .

这使我像这样使用它:

const req: SendPasswordReminderRequest = {
    inlineObject1:{
      email: "..."
  }
};

APIClient.user.sendPasswordReminder(req, ...)

相反,我想要的是完全摆脱它InlineObject1SendPasswordReminderRequest直接包装email属性,并能够将其用作:

const req: SendPasswordReminderRequest = {
   email: "..."
};

APIClient.user.sendPasswordReminder(req, ...)

我已经尝试在components/requestBodies和 using中定义正文,$ref即使它使用我的请求正文类型的名称,它仍然包装实际正文。

我怎样才能摆脱这种包装?

4

2 回答 2

8

我不确定这是否仍然与您相关,但在代码中我找到了一种方法来解决根本不生成 InlineObjects

如果您为 requestBody 中使用的模式定义“标题”,它将使用它title来命名内联对象。

因此,根据您命名架构的方式,您可以获得类似于:sendPasswordReminderRequestData 的东西,而不是获取 InlineObject。

希望这可以帮助您或其他任何人:)。

于 2021-02-17T14:32:01.960 回答
0

这是一个如何将标题添加到 POST 请求的示例,以便通过客户端生成器使用友好名称生成它(为简洁起见,省略了其他数据):

{
  "openapi": "3.0.1",
  "paths": {
    "/Users/Hello": {
      "post": {
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "title": "UsersHelloRequest",
              }
            }
          }
        }
      }
    }
  }
}
于 2022-01-12T15:19:54.073 回答