如何配置 swagger-codegen 以在 openApi3 上为“allOf”类生成全参数构造函数?

问题描述

我想为包含 allOf 的规范修改 swagger-codegen-cli-3.0.24.jarpojo-mustache 模板生成一个 all args 构造函数3.0.24 现在生成 A extends B(某些字段的继承),而 2.4.14 过去只生成 A(所有字段的组合)。因此,生成全参数构造函数的胡子标记需要访问基类变量类型/名称。这是如何实现的?

更多细节:

运行 swagger-codegen 2.4.14 生成 Java 语言 jaxrs-spec

java -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

使用 pojo.mustache(摘自下面的 https://mvnrepository.com/artifact/io.swagger/swagger-codegen-cli/2.4.14

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

结果:

public class ExtendedErrorModel   {
  
  private final String message;
  private final Integer code;
  private final String rootCause;

可以通过添加以下内容来增强 pojo.mustache 以生成 all args 构造函数

public {{classname}}({{#vars}}@JsonProperty("{{name}}"){{& datatypeWithEnum}} {{name}}{{#hasMore}},{{/hasMore}}{{/vars}})

结果:

  public ExtendedErrorModel(@JsonProperty("message")String message,@JsonProperty("code")Integer code,@JsonProperty("rootCause")String rootCause) {

使用 swagger-codegen-cli-2.4.18.jar 运行相同的 composition_2.yaml 结果:

public class ExtendedErrorModel extends BasicErrorModel  {
  private @Valid String rootCause = null;

运行与 swagger-codegen-cli-3.0.24.jar 等效的 openApi3 具有与 swagger-codegen-cli-2.4.18 相同的输出.jar

最新的 swagger 2 pojo.mustache https://github.com/swagger-api/swagger-codegen-generators/blob/master/src/main/resources/handlebars/JavaJaxRS/spec/pojo.mustache#L6 和 openAPi3 pojo.mustache https://github.com/swagger-api/swagger-codegen-generators/blob/master/src/main/resources/handlebars/JavaJaxRS/spec/pojo.mustache#L6 具有相同的类定义标记,但扩展与 2.4.14 版本相比没有改变,暗示了底层的 swagger-codegen 代码变了:

public class {{classname}} {{#parent}}extends {{{parent}}}{{/parent}} {{#serializableModel}}implements Serializable {{#interfaceModels}},{{classname}}{{^@last}},{{/@last}}{{#@last}} {{/@last}}{{/interfaceModels}}{{/serializableModel}}{{^serializableModel}}{{#interfaceModels}}{{#@first}}implements {{/@first}}{{classname}}{{^@last}},{{/@last}}{{#@last}} {{/@last}}{{/interfaceModels}}{{/serializableModel}} {

如何访问 mustache 中的基类字段类型/名称生成全参数构造函数?请注意,在 2.4.18 和 3.0.24 中,swagger-codegen-cli-DdebugModels 在遇到 allOf 时崩溃,因此无法检查模型。

类似于:

{{#models}}{{#interfaceModels}}{{#vars}}{{baseName}}

解决方法

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

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

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