openapi生成-初始化对象

时间:2019-02-14 14:14:10

标签: java openapi openapi-generator

我使用openapi-generator-maven-plugin从yml文件生成代码。

<groupId>org.openapitools</groupId>
<artifactId>openapi-generator-maven-plugin</artifactId>
<version>3.3.4</version>

从yml生成对象时,所生成的代码始终会生成对象并将其初始化为null。

例如:

public class Foo   {
  @JsonProperty("bar")
  private Bar bar = null;
}

是否可以使用对象本身来初始化对象,例如:

public class Foo   {
  @JsonProperty("bar")
  private Bar bar = new Bar();
}

1 个答案:

答案 0 :(得分:0)

一些有助于您的摘要和链接。

pom.xml中的插件配置:

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>4.2.2</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${project.basedir}/docs/openapi/api.yml</inputSpec>
                <generatorName>java</generatorName>
                <templateDirectory>docs/openapi/template</templateDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

复制默认模板,例如来自Java module of OpenAPI generator,并将所有胡须文件放在您项目的某个目录中-检查插件配置(在我的情况下为docs/openapi/template)。

找到文件pojo.mustache,它是生成POJO文件的模板。

这时您需要了解一些基本的Mustache语法。找到一个片段:

[...]
{{^isContainer}}
  private {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}};
{{/isContainer}}
[...]

更改为您想要的任何内容,例如:

[...]
{{^isContainer}}
private {{{datatypeWithEnum}}} {{name}}{{#defaultValue}} = {{{.}}}{{/defaultValue}}{{^defaultValue}}{{^isPrimitiveType}} = new {{datatypeWithEnum}}(){{/isPrimitiveType}}{{/defaultValue}};
{{/isContainer}}
[...]

此模板摘要将为每个非原始数据类型生成new TypeYouWantToUse()个部分。

请注意,这只是一个简单的示例,说明如何继续进行。有很多极端情况,例如enum处理。

其他读数: