在我们的 swagger.yaml 文件中,我们有一个定义 Cat
使用 allOf
包括 Pet
的所有属性。
Cat:
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
# ...
期望是在生成 Java 源代码时,我们得到 p>
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
最佳答案
正如 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必须引用同一架构中的属性,并且它必须是必需的属性,这两种情况都不是这样 - 但它有效,至少到目前为止是这样。 :)
关于java - 如何让 maven swagger codegen 插件使用继承生成 Java 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57771534/