使用带有 Lombok 注释的 OpenAPI 生成器生成 POJO

时间:2021-01-15 09:55:23

标签: java spring-boot swagger openapi openapi-generator

我正在使用如下所示的 OpenAPI 生成器 maven 插件来为模型生成 Java 客户端代码。

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>4.3.1</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>${project.basedir}/src/main/resources/api.yaml</inputSpec>
                <generatorName>java</generatorName>
                <configOptions>
                   <sourceFolder>src/gen/java/main</sourceFolder>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

当我生成模型类时,它们会使用通常的 POJO 字段声明以及 getter 和 setter 生成。但我想要做的是,我希望我的类使用 Lombok 注释自动生成,而不是生成 getter 和 setter,用于 Java pojo,如 @Getter@Setter@Data 等。有没有办法自定义模型生成器以满足上述用例要求?

我试图找出是否有办法。我找到了这个 discussion,其中最后一条评论谈到了 PR,其中使用 Lombok 注释生成模型的问题已得到解决。但是我在 OpenAPI 生成器开源项目中没有看到任何明确的使用迹象或任何关于此功能的文档,说明它尚未实现。那么,今天有没有办法用 Lombok 注释而不是常规的 getter 和 setter 生成模型?

2 个答案:

答案 0 :(得分:3)

完成这个非常古老的线程:现在它确实支持 Lombok 注释。

示例取自 here

 <configOptions>
     <additionalModelTypeAnnotations>@lombok.Builder @lombok.NoArgsConstructor @lombok.AllArgsConstructor</additionalModelTypeAnnotations>
 </configOptions>

答案 1 :(得分:1)

编辑:此答案已弃用。请参阅@Laess3r 的帖子。我会留下这个,因为它适用于旧版本的 opnapi 生成器。


openapi-generator 尚不支持 Lombok 注释。如果要生成带有 Lombok 注释的代码,则需要在 mustache 中创建自定义模板,如 https://openapi-generator.tech/docs/templating/ 中所述。

如果您从未使用过 mustache,请注意它有点难以阅读,因此请尝试使模板尽可能简单,并确保添加单元测试以验证生成的输出。模板看起来像这样:

/**
 * {{#description}}{{description}}{{/description}}
 */
@Data
public class {{classname}} {{#parent}}extends {{{parent}}} {{/parent}} {
{{#vars}}
    /**
     * {{#description}}{{description}}{{/description}}
     */
    @JsonProperty("{{#lambda.lowercase}}{{nameInSnakeCase}}{{/lambda.lowercase}}")
    private {{{datatypeWithEnum}}} {{name}};
{{/vars}}