2

在我们的 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不使用configOptionsset 时,我们得到以下结果:

public class Cat {

Cat自己实现所有Pet的属性,而不是扩展它。

你如何告诉swagger-codegen-maven-pluginJava 使用继承(即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
4

1 回答 1

2

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

   discriminator: "type"

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

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

这有点奇怪,因为 OpenAPI 规范版本 2.0 声明discriminator固定字段必须引用来自同一模式的属性,并且它必须是一个required属性,两者都不是这种情况 - 但它至少在今天有效. :)

于 2019-09-11T08:31:18.370 回答