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

Generating POJOs using OpenAPI generator with Lombok Annotations

我正在使用如下所示的 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 注释的 Java pojos 的 @Getter@Setter,而不是生成 getter 和 setter @Data,等等。有没有办法自定义模型生成器以满足上述用例要求?

我想看看有没有办法。我发现这个 discussion, where the very last comment talks about a PR,其中解决了使用 Lombok 注释生成模型的问题。但是我在 OpenAPI 生成器开源项目中没有看到任何明确的使用指示或任何关于此功能的文档,表明它已经实现。那么,现在有没有什么方法可以用 Lombok 注释而不是常规的 getter 和 setter 来生成模型?

编辑: 此答案已弃用。请参阅@Laess3r 的 post。我将保留它,因为它适用于旧版本的 openapi 生成器。


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}}

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

示例取自 here

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

我已经能够使用 space 实现此功能 out-of-the-box 模型上的单独注释列表:

@lombok.experimental.SuperBuilder @lombok.external.Jacksonized

如果模型 readOnly 设置为“true”,Builder 将成为制作对象的唯一方法,@Jacksonized 允许它是 serialized/deserialized。继承有一些限制(在 configOptions 中关闭要求所有必需的参数)。