首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有Lombok注释的OpenAPI生成器生成POJO

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

Stack Overflow用户
提问于 2021-01-15 09:55:23
回答 3查看 13.4K关注 0票数 11

我使用OpenAPI生成器maven插件,如下所示,用于为模型生成Java代码。

代码语言:javascript
复制
<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生成的。但是,我想要做的是,与生成getter和setter不同,我希望我的类能够使用@Getter@Setter@Data等Java的Lombok注释自动生成。有什么方法可以定制模型生成器以适应以上的用例需求?

我想找出是否有办法。我找到了这个讨论,最后一条评论谈到了一个按下,其中讨论了使用Lombok注释生成模型的问题。但是,在OpenAPI生成器开放源码项目中,我没有看到任何关于这个特性的使用或文档的明确指示,它已经实现了。那么,有什么方法可以用Lombok注释而不是常规的getter和setter来生成模型呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-04-08 05:53:25

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

取自这里的例子

代码语言:javascript
复制
 <configOptions>
     <additionalModelTypeAnnotations>@lombok.Builder @lombok.NoArgsConstructor @lombok.AllArgsConstructor</additionalModelTypeAnnotations>
 </configOptions>
票数 34
EN

Stack Overflow用户

发布于 2021-01-15 23:37:42

编辑:这个答案是不推荐的。请看@Laess3r的帖子。我将保留这个,因为它适用于早期版本的openapi生成器。

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

如果您从未使用过mustache,请注意阅读起来有点困难,所以尽量保持模板的简单性,并确保添加单元测试来验证生成的输出。模板将如下所示:

代码语言:javascript
复制
/**
 * {{#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}}
票数 2
EN

Stack Overflow用户

发布于 2022-03-22 23:15:25

我已经能够通过使用模型注释的空格分隔列表来实现这一工作:

代码语言:javascript
复制
@lombok.experimental.SuperBuilder @lombok.external.Jacksonized

如果模型将readOnly设置为"true“,则生成器将成为创建对象的唯一方法,而@Jacksonized允许将其序列化/反序列化。继承有一些限制(关闭需要configOptions中所有必需的参数)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65733938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档