【问题标题】:How to generate constructors in swagger codegen?如何在 swagger codegen 中生成构造函数?
【发布时间】:2017-08-19 05:56:08
【问题描述】:

codegen 没有生成任何构造函数。 我提到了petstore swagger文件,使用了最新的swagger codegen jar文件。

但是只生成了默认构造函数。

它没有根据其字段生成构造函数。

如何开启?

【问题讨论】:

  • 为什么 tihs 被否决了?
  • 您究竟生成了哪个目标?生成的构造函数是什么样子的,你期望它是什么样子的?
  • 要启用它,您需要修改模板以创建您想要的构造函数
  • Swagger 生成的东西与典型的构造函数不同。它使用构建器设计模式。例如。如果你有类 Carenginewheels 变量,你可以像这样初始化那个类:Car car = new Car().engine("Diesel").wheels(4)
  • 你解决了这个问题吗?我也有兴趣

标签: java swagger-codegen


【解决方案1】:

如果你真的需要一个带参数的构造函数,你可以通过修改以 .moustache 结尾的模板文件来实现。

"enable/use/modify" templates

我将假设您将要编辑现有模板并希望每个模型都有一个构造函数。

这是模型模板文件中构造函数的简单示例:

public {{classname}}( {{#vars}} {{datatype}} {{baseName}}{{^-last}},{{/-last}} {{#-last}}){
construct code here
}{{/-last}}{{/vars}}

请注意,这应该位于 {{#model}} {{/model}} 标签之间

有关胡须模板的更多信息,请参阅

https://mustache.github.io/mustache.5.html

List of template variables

template examples for the codegen

【讨论】:

  • 这种方法能否生成作为已生成类层次结构一部分的构造函数?所以如果 Animal.java 有一个 String 名称,而 Dog.java 扩展 Animal 并添加 String 品种,这种方法是否可以像这样生成 Dog 的构造函数: Dog(String name, String Breed) { super(name); this.breed = 品种 }?
  • codegen 中应该有层次结构/继承支持。我不能保证它,因为我还没有使用它。我猜你可以在模板中使用一些与层次结构相关的 codgenmodel 变量(如果它们工作正常)。
【解决方案2】:

我首先要感谢@Viktor Baert 的回答。虽然答案提供了方向,但它并没有提供足够的解决方案。请注意上述答案的更改和补充。

构造函数签名中的变化是从 {{datatype}}{{{datatypeWithEnum}}}。此更改将支持任何使用泛型的属性,例如 List。

第二个是对局部变量的参数赋值。

当这些更改直接或覆盖应用于 pojo.mustache 时,结果是生成了一个可用的构造函数。这适用于 swagger 和 openapi 生成器。

public {{classname}}( {{#vars}} {{{datatypeWithEnum}}} {{baseName}}{{^-last}},{{/-last}} {{#-last}}){
  {{#vars}}
  this.{{baseName}} = {{baseName}};
  {{/vars}}
}{{/-last}}{{/vars}}

参考:add constructors to code generated by openapi codegen

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-09
    • 2016-06-02
    • 1970-01-01
    • 2022-01-22
    • 2020-06-15
    • 2011-03-29
    • 2019-02-13
    • 1970-01-01
    相关资源
    最近更新 更多