OpenAPI Generator/Swagger Codegen 中的嵌套属性继承

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?