Как у вас есть плагин maven swagger codegen, который генерирует классы Java с использованием наследования?

В нашем файле swagger.yaml есть определение Cat который использует allOf включить все свойства Pet.

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

Ожидания в том, что при создании источников Java, мы получаем

public class Cat extends Pet {

Это работает при использовании редактора Swagger.

Когда используешь swagger-codegen-maven-plugin без configOptions set, получаем следующее:

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

2 ответа

Решение

Как указано на github Чиочуаном, обходной путь - добавить

   discriminator: "type"

к определению родителя, чтобы дочерние классы Java расширяли его.

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

Это немного странно, поскольку в спецификации OpenAPI версии 2.0 указано, что discriminatorФиксированное поле должно ссылаться на свойство из той же схемы и должно бытьrequiredсобственности, и то и другое не так, но работает, по крайней мере, на сегодняшний день.:)

Есть ли причина, по которой вы не хотите включать « configOptions »? Плагин swagger-codegen-maven-plugin версии 4.3.1 работает со следующей конфигурацией.

Другие вопросы по тегам