如何让maven swagger codegen插件使用继承生成Java类?
在swagger.yaml文件中,我们有一个定义如何让maven swagger codegen插件使用继承生成Java类?,java,maven,swagger,swagger-codegen-maven-plugin,Java,Maven,Swagger,Swagger Codegen Maven Plugin,在swagger.yaml文件中,我们有一个定义Cat,它使用allOf来包括Pet的所有属性 Cat: allOf: - $ref: '#/definitions/Pet' - type: object properties: # ... 的期望是,在生成Java源代码时,我们得到 public class Cat extends Pet { 这在使用时有效 当在未设置配置选项的情况下使用swagger-codegen-maven插件时,我们得到
Cat
,它使用allOf
来包括Pet
的所有属性
Cat:
allOf:
- $ref: '#/definitions/Pet'
- type: object
properties:
# ...
的期望是,在生成Java源代码时,我们得到
public class Cat extends Pet {
这在使用时有效
当在未设置配置选项的情况下使用swagger-codegen-maven插件时,我们得到以下结果:
public class Cat {
Cat
实现了Pet
本身的所有属性,而不是对其进行扩展
你如何告诉大摇大摆的codegen maven插件
使用Java进行继承(即扩展
)?(我们尝试了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
正如作者在github上指出的,解决方法是添加
discriminator: "type"
以使Java子类扩展父类的定义
definitions:
Pet:
type: "object"
discriminator: "type"
required:
- "name"
properties:
name:
type: "string"
example: "doggie"
这有点奇怪,因为OpenAPI规范版本2.0声明必须引用来自同一架构的属性,并且必须是必需的属性,这两种情况都不是这样的-但至少从今天起它是有效的。:)