看起来 swagger-codegen-cli -DdebugModels 不显示父级,显示无法访问的 interfaceModels 并且在 2.4.14 之后损坏?

问题描述

运行 swagger-codegen 2.4.14 以生成带有 -DdebugModels 的 Java 语言 jaxrs-spec:

java -DdebugModels -jar swagger-codegen-cli-2.4.14.jar generate -i composition_2.yaml -l jaxrs-spec

使用规范 https://swagger.io/specification/v2/“带组合的模型”示例,其中 composition_2.yaml 包含以下摘录:

ExtendedErrorModel:
  allOf:     # Combines the BasicErrorModel and the inline model
    - $ref: '#/deFinitions/BasicErrorModel'
    - type: object
      required:
        - rootCause
      properties:
        rootCause:
          type: string

产生:

[…{…},{
  "importPath" : "io.swagger.model.ExtendedErrorModel","model" : {
    "interfaces" : [ "BasicErrorModel" ],"interfaceModels" : [ {
      "name" : "BasicErrorModel","classname" : "BasicErrorModel","classVarName" : "basicErrorModel",…
      "vars" : [ {
        "baseName" : "message","getter" : "getMessage","setter" : "setMessage","datatype" : "String",…]
  1. 鉴于此使用了 https://github.com/swagger-api/swagger-codegen/blob/master/modules/swagger-codegen/src/main/resources/JavaJaxRS/pojo.mustache 中的 pojo.mustache(摘自 https://mvnrepository.com/artifact/io.swagger/swagger-codegen-cli/2.4.14 下面)(请注意,在 2.4.14 之后 -DdebugModels 导致 stackOverflowError 崩溃,因此我尽管 openApi3 版本是我真正感兴趣的版本,但无法检查该模型)

public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#serializableModel}}implements Serializable{{/serializableModel}} {

为什么 parent 在 debugModel 输出不显示为元素?

  1. 鉴于上面显示生成的 debugModel 的摘录,获取 ExtendedErrorModel 的 model.interfaceModels.vars.baseName 的语法是什么?类似于:{{#models}}{{#interfaceModels}}{{#vars}}{{baseName}}? (这不起作用)。

  2. 考虑到这些版本生成 ExtendedErrorModel extends BasicErrorModel,ExtendedErrorModel 的 model.interfaceModels.vars.baseName 是否是在 2.4.17 和 3.0.24 中查找基类变量名称的正确路径而 2.4.14 只生成包含所有字段的 ExtendedErrorModel

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)