java - openapi生成-初始化对象

标签 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();
}

最佳答案

一些可以帮助您的片段和链接。

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并将所有 Mustache 文件放入项目中的某个目录中 - 检查插件配置(在我的例子中是 docs/openapi/template )。

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

此时您需要了解一些基本的 Mustache 语法。查找sych片段:

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

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

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

此模板片段将为每个非原始数据类型生成新的 TypeYouWantToUse() 部分。

请注意,这只是一个如何进一步进行的简单示例。有很多极端情况,例如枚举处理。

进一步阅读:

关于java - openapi生成-初始化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54692464/

相关文章:

java - Spring 推荐 : proxying mechanism vs @Transactional on class or interface

java - spring boot 构建包 org.junit 不存在

ServiceStack - 使用 OpenApiFeature 自定义生成的 OpenAPI JSON

java - 无法使用 openapi-generator-gradle-plugin 生成接口(interface)

java - SpringBoot 未加载使用 OpenAPI 3.0 生成的 Controller

java - java打印代码正在工作,发送到打印机但不打印任何内容(python中的java)

Java Swing JList

c# - 对于同一个 C# 项目,为什么 NSwag 在我的计算机上失败,而在我的同事上却失败?

openapi - 在 OpenAPI 中,我可以使用常规架构组件作为参数吗?

java - Openapi生成器不生成@XmlAttribute/@XmlElement注释