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

如何让maven swagger codegen插件使用继承生成Java类?,java,maven,swagger,swagger-codegen-maven-plugin,Java,Maven,Swagger,Swagger Codegen Maven Plugin,在swagger.yaml文件中,我们有一个定义Cat,它使用allOf来包括Pet的所有属性 Cat: allOf: - $ref: '#/definitions/Pet' - type: object properties: # ... 的期望是,在生成Java源代码时,我们得到 public class Cat extends Pet { 这在使用时有效 当在未设置配置选项的情况下使用swagger-codegen-maven插件时,我们得到

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

Cat:
  allOf:
    - $ref: '#/definitions/Pet'
    - type: object
      properties:
      # ...
的期望是,在生成Java源代码时,我们得到

public class Cat extends Pet {
这在使用时有效

当在未设置配置选项的情况下使用
swagger-codegen-maven插件时,我们得到以下结果:

public class Cat {
Cat
实现了
Pet
本身的所有属性,而不是对其进行扩展

你如何告诉
大摇大摆的codegen maven插件
使用Java进行继承(即
扩展
)?
(我们尝试了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

正如作者在github上指出的,解决方法是添加

   discriminator: "type"
以使Java子类扩展父类的定义

definitions:
  Pet:
    type: "object"
    discriminator: "type"
    required:
      - "name"
    properties:
      name:
        type: "string"
        example: "doggie"
这有点奇怪,因为OpenAPI规范版本2.0声明必须引用来自同一架构的属性,并且必须是
必需的
属性,这两种情况都不是这样的-但至少从今天起它是有效的。:)