你如何让 maven swagger codegen 插件使用继承生成 Java 类?

How do you have the maven swagger codegen plugin generate Java classes using inheritance?

在我们的 swagger.yaml 文件中,我们有一个定义 Cat,它使用 allOf 来包含 Pet 的所有属性。

Cat:
  allOf:
    - $ref: '#/definitions/Pet'
    - type: object
      properties:
      # ...

期望是当生成Java源时,我们得到

public class Cat extends Pet {

这在使用 Swagger Editor 时有效。

在没有设置 configOptions 的情况下使用 swagger-codegen-maven-plugin 时,我们得到以下结果:

public class Cat {

Cat 本身实现了 Pet 的所有属性,而不是扩展它。

你如何告诉 swagger-codegen-maven-plugin 使用带有继承的 Java(即 extends)?(我们都尝试了 spring 和 java 作为语言。)

这是一个示例 swagger.yaml 文件:

swagger: '2.0'

info:
  version: 1.0.0
  title: simple inheritance

tags:
  - name: "pet"

paths:
  /cat:
    put:
      tags:
        - "pet"
      operationId: "updateCat"
      consumes:
        - "application/json"
      parameters:
        - in: "body"
          name: "body"
          required: true
          schema:
            $ref: "#/definitions/Cat"
      responses:
        200:
          description: Nada

definitions:
  Pet:
    type: "object"
    required:
      - "name"
    properties:
      name:
        type: "string"
        example: "doggie"
  Cat:
    allOf:
      - $ref: '#/definitions/Pet'
      - type: object
        properties:
          huntingSkill:
            type: string
        required:
          - huntingSkill

正如 chiochuan 在 github 上指出的那样,解决方法是添加

   discriminator: "type"

到父项的定义,使 Java 子项 类 扩展它。

definitions:
  Pet:
    type: "object"
    discriminator: "type"
    required:
      - "name"
    properties:
      name:
        type: "string"
        example: "doggie"

这有点奇怪,因为 OpenAPI 规范版本 2.0 声明 discriminator Fixed Field 必须从同一模式引用 属性,并且它必须是 required 属性,两者都不是这种情况 - 但它有效,至少在今天是这样。 :)