java - openapi 生成 - 初始化对象
问题描述
我正在使用 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>
复制默认模板,例如从OpenAPI 生成器的 Java 模块,并将所有的 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}}
[...]
此模板片段将为new TypeYouWantToUse()
每个非原始数据类型生成部分。
请注意,这只是一个如何进一步进行的简单示例。有许多极端情况,例如enum
处理。
进一步阅读:
推荐阅读
- html - 我的 CSS 代码在 Chrome 中不起作用,内联 CSS、内部 CSS 或外部 CSS 都不起作用
- r - 在 tidyverse 中动态添加多列
- python - 如何用字符串匹配多个关键字,将多个List[Tuples]拆分成元组,并将这些元组追加到对应的pandas dataframe中
- ruby-on-rails - Rails 6:简单日历+引导带模式+简单表格
- javascript - 在全局范围内可访问的函数变量
- html - VS Code 实时服务器扩展不起作用
- php - 强制下载内容长度不匹配的文件
- flutter - 在无状态小部件中使用构建方法之外的上下文
- wordpress - 如何通过 BuddyPress API 更新 XProfile “复选框”类型字段?
- css - flexbox:为我的元素在左侧创建一个空间