Swagger codegen反序列化动态响应

Swagger codegen deserialize dynamic reponse

从我的 Java 后端,我正在使用另一个我不管理的后端,它的 API 定义不可用。我正在创建其服务的 OpenAPI 定义,并使用 Swagger Codegen 生成客户端。

有一个端点 returns 一个复杂的对象:

{
    "total": 151,
    "version": 4,
    "dynamicItem1": [
        "codeDynamicItem1",
        293,
        63700,
        19,
        "nameDynamicItem1",
        "",
        "",
        "",
        0,
        -64
    ],
    "dynamicItem2": [
        "codeDynamicItem2",
        237,
        40000,
        478,
        "nameDynamicItem2",
        "string1",
        "string2",
        "string3",
        0,
        0
    ]

}

在该对象中,totalversion 始终存在,但在同一级别上有数百个动态项。在上面的示例中,密钥是可预测的,但实际上是一系列字母和数字,例如“245df921”。动态项始终是具有相同项数和相同预期位置的数组。

为了解析该对象,我使用 additionalProperties 因为我读到它是解析 hashmap 的正确方法,但似乎我没有正确应用它。

目前我的 OpenAPI 表示如下:

openapi: 3.0.2
info:
  version: 1.0.0
  title: title
  description: description
paths:
  /complexObject:
    get:
      responses:
        '200':
          description: "OK"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Object'
components:
  schemas:
    Object:
      type: object
      properties:
        total:
          type: number
          example: 151
        version:
          type: number
          example: 4
        additionalProperties:
          type: array
          items:
            type: string
            nullable: true

使用该实现可以正确返回 totalversion,但在响应对象中有一个 additionalProperties 属性具有空值。

我错过了什么?

additionalProperties 需要与 properties.

处于同一级别

此外,由于这些动态数组是多种类型(字符串/整数),您需要 oneOf 来定义可能的项目类型。

components:
  schemas:
    Object:
      type: object
      properties:
        total:
          type: number
          example: 151
        version:
          type: number
          example: 4
      additionalProperties:   # <-----
        type: array
        items:
          oneOf:              # <-----
            - type: string
              nullable: true
            - type: integer