Как у вас есть плагин 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 работает со следующей конфигурацией.