问题描述
我想为包含 allOf 的规范修改 swagger-codegen-cli-3.0.24.jar 的 pojo-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 (将#修改为@)