如何解决OpenAPI Generator/Swagger Codegen 中的嵌套属性继承
我正在尝试使用第三方公司提供给我的 Swagger 模式生成 Java 模型,但生成失败或无法生成我期望的对象。我不确定是生成器还是架构出了问题。
本质上,模式有一个父对象 Pet 有一个属性“attributes”,其中“attributes”有一个属性“size”。该架构还有一个子对象 Cat,它“继承”自 Pet(在 'allOf' 语句中引用 Pet),并且它本身具有一个带有嵌套属性“whiskerCount”的属性“attributes”。
Cat:
allOf:
- $ref: '#/deFinitions/Pet'
- type: object
properties:
attributes:
type: "object"
properties:
weight:
type: "string"
Pet:
type: "object"
properties:
attributes:
type: "object"
properties:
whiskerCount:
type: "integer"
format: "int64"
使用 Swagger 编辑器 (2.0) 时,UI 模型显示为我提供架构的公司试图实现的结果:
Cat {
attributes {
whiskerCount integer($int64)
weight string
然而,在尝试生成模型时,结果是:
发电机 | 结果 |
---|---|
Swagger Codegen (2.2.1) | 生成失败:getAttributes() in Cat cannot override getAttributes() in Pet (返回类型不兼容) |
OpenAPI 生成器(4.3.1、5.0.0、5.1.0) | 生成成功,但生成类“Cat.java”、“CatAllOf.java”、“CatAllOfAttributes.java”、“Pet.java”、“PetAttributes.java”。 Cat#attributes(CatAllOfAttributes 类型)仅包含“whiskerCount”,而 Pet#attributes(PetAttributes 类型)仅包含“size”) |
有没有办法实现一个“组合”的 Attributes 对象(Cat 的成员变量),它同时包含了whiskerCount 和size 两个字段?
解决方法
尝试将类型和属性放在同一级别(allOf)
Cat:
allOf:
- $ref: '#/definitions/Pet'
type: object
properties:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。