您如何让Maven swagger Codegen插件使用继承生成Java类?

时间:2019-09-03 12:13:03

标签: 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 Editor时有效。

在未设置swagger-codegen-maven-plugin的情况下使用configOptions时,我们得到以下信息:

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

1 个答案:

答案 0 :(得分:0)

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属性,两者都不是情况-但至少在今天为止仍然有效。 :)