你如何让 maven swagger codegen 插件使用继承生成 Java 类?
How do you have the maven swagger codegen plugin generate Java classes using inheritance?
在我们的 swagger.yaml 文件中,我们有一个定义 Cat
,它使用 allOf
来包含 Pet
的所有属性。
Cat:
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
# ...
期望是当生成Java源时,我们得到
public class Cat extends Pet {
这在使用 Swagger Editor 时有效。
在没有设置 configOptions
的情况下使用 swagger-codegen-maven-plugin
时,我们得到以下结果:
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 必须从同一模式引用 属性,并且它必须是 required
属性,两者都不是这种情况 - 但它有效,至少在今天是这样。 :)
在我们的 swagger.yaml 文件中,我们有一个定义 Cat
,它使用 allOf
来包含 Pet
的所有属性。
Cat:
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
# ...
期望是当生成Java源时,我们得到
public class Cat extends Pet {
这在使用 Swagger Editor 时有效。
在没有设置 configOptions
的情况下使用 swagger-codegen-maven-plugin
时,我们得到以下结果:
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 必须从同一模式引用 属性,并且它必须是 required
属性,两者都不是这种情况 - 但它有效,至少在今天是这样。 :)