自己动手写个 IDEA 高效插件:Swagger注解、JavaDoc一键生成

全新前后端微商城项目,手把手教学!

全新前后端微商城项目,手把手教学!

全新前后端微商城项目,手把手教学!

下面是一个普通的Request类,先简单的看一下:

/**
 * TestRequest desc
 */
@Data
@Slf4j
public class TestRequest {
    private String name;
    private Integer age;
    private Address address;
    /**
     * address desc
     */
    @Setter
    @Getter
    public static class Address {
        private String country;
        private String province;
        private String city;
    }
}

因为公司的要求,我们需要使用Protobuff完成序列化工作,并且需要生成API文档,所以我们一般需要补上Swagger注解和Tag注解。为了补上这两种注解,你需要一点一点地敲键盘了。

稍微思考一下就会发现,补充Swagger注解的方法,一般是将相关POJO中同名字段的JavaDoc复制过来,改为Swagger注解的格式即可,而补充Tag注解更简单了,就是无脑的对字段按顺序进行编号,只要保证编号的顺序是递增的且不重复即可。

很明显,上述工作是重复、单调、乏味、无聊、机械的,一切重复、单调、乏味、无聊、机械的工作都可以解放出来,下面直接给出解决方案,使用文字+图片解释太单薄了,直接给出动图:

a5d261943c95cee43822fdc200a9b092.gif

当然了,这个功能不止可以操作普通的POJO类,Controller类也是可以处理的:

07b2a7b6c33ff757ea441ac77e1b6361.gif

简单来说,我写了一个IDEA插件,在需要添加/删除Swagger注解、Tag注解、JavaDoc注释方面,能够明显提效,尽可能将大家从重复、单调、乏味、无聊的工作中解放出来。

快速开始

想要获得这个插件很简单,打开 Jetbrains Marketplace 的插件页面,直接下载、安装即可:

https://plugins.jetbrains.com/plugin/22348-bitkylin-universal-generate

当然了,直接打开 IntelliJ IDEA 进入 Settings -> Plugins -> Marketplace,搜索 Bitkylin Universal Generate 也能够找到。

安装后,记得进入 Settings -> Tools -> Bitkylin Universal Generate,将语言切换到中文(插件考虑到了国际化,所以默认英文哦😉)。

5637f4d0aebe6c58cb600161d070caba.png

插件的基本用法,上面的动图中略微展示了一下,不过动图中只展示了两个功能。打开右键菜单后可以看到,新增了好几个功能哦,他们都是做什么的呢?

45172a74922c51c820e846f1de3c2fe4.png

核心功能

你可以通过右键菜单,一键生成Swagger注解:@Api, @ApiOperation, @ApiModel, @ApiModelProperty,一键生成Protostuff注解:@Tag

全局生成注解的最佳实践,就是上面的动图中演示的那样,除了上面列出的全局一键生成注解外,还是有一些扩展功能,下面系统介绍一下插件的核心功能。

对整个文档处理,统一生成注释、注解

就像上面两张动图中演示的那样,我们随意打开右键菜单,可以看到选项说明中,作用范围是整个文档,此时执行各个功能时,会对整个文档中的所有元素进行处理。

e5e822f177cf4ba1cc8da94bc8d482f2.png
可以对指定字段单独生成注释、注解

除了对整个文档统一处理外,你也可以对单个字段进行处理,比如还是对上面列出的那个POJO类进行操作。首先将光标指向某个字段名,打开右键菜单,此时插件功能全都变更为了对当前字段进行处理。依次进行如下操作:

  • 删除JavaDoc注释

  • 删除刚刚生成的Swagger注解

  • 填充JavaDoc注释

  • 填充Swagger注解

c6cc4722db225ce35660d94125cef444.gif

整个操作行云流水~~~

当然我承认,手动删除一个字段的JavaDoc注释、注解,比使用插件删除效率更高。。。但是如果要删除整个类中所有的JavaDoc注释、注解,还是使用插件效率更高:

ce0384cc8e92dd8391ae8f10fa0c71bc.gif

除了对POJO类中的字段进行操作外,也可以将光标指向Controller类的方法、类名,指向POJO类的类名,选择相应的功能即可对指定的元素进行处理。

将API层的POJO类转换为Service层的POJO类

因为我们需要生成API文档,我们需要使用Protobuff完成序列化工作,所以我们一般需要在API层的POJO类上补充Swagger注解和Tag注解,但是Service层的POJO类不需要这些注解,最多只需要填充JavaDoc注释即可。

考虑这样一个场景:我们和二方对接时,拿到了一个二方API,为了对API进行隔离,我们可以将二方API中定义的Request、Response类复制一份在Service层自己用,可以考虑下面的操作:

  • 将POJO类中的Swagger注解转换为JavaDoc注释

  • 删除POJO类中的所有Swagger、Tag注解

这些操作同样是上面说的重复、单调、乏味、无聊、机械的工作,同样可以使用插件一键完成。上面演示了一大堆令人眼花缭乱的功能,我们打开右键菜单梳理一下,插件提供的四个选项中,除了「注解转JavaDoc」外,都演示过了。那么很显然,这个场景涉及到的就是「注解转JavaDoc」这个功能。

f92737b92392af2733a57a34c60a05de.png

我们使用「注解转JavaDoc」功能,对整个文档一键处理,直接看动图:

d36a42445af5d0610f89bb4d57bb67e3.gif

使用插件可以一键优雅完成,如果手动做的话,那是真的浪费生命了!

功能释义

上面演示了插件的核心功能,如果仅仅看动图的话,肯定会有很多疑惑的,这一小节尽可能的解释各个功能及其原理。

删除元素

这个功能有四个子选项,可以自由选择要删除的元素哦。一键删除整个文档中的注释、注解,其实还是很好用的。

78753bd768df751ec4ca37e2a76755e8.png

插件在展示选项前,会检测当前项目是否有swagger、protostuff依赖,如果没有相关依赖,相关选项也是没有的哦。

生成注解

上面演示的最多的就是这个功能,该功能会在Controller类相关元素上添加@Api@ApiOperation注解,会在POJO类的相关元素上添加@ApiModel@ApiModelProperty@Tag注解。

目前标注@Controller@RestController注解的类,或类名以Controller结尾的类,会被识别为Controller类。标注@Data@Getter@Setter注解的类,会被识别为POJO类。如果大家有更好的识别Controller类和POJO类的方法可以留言😁。

值得一提的是,@Tag注解中的序号,会根据字段所处位置的不同,进行动态填充哦,原则是尽可能保证有序、唯一。

注解转JavaDoc

核心用法是,上面重点介绍的「将API层的POJO类转换为Service层的POJO类」场景,该功能做了以下事情:

  • 将Swagger注解中的value字段值提取出来,转换为JavaDoc注释

  • 删除POJO类中的所有Swagger、Tag注解

查找JavaDoc

该功能用于给无任何注释、注解的字段,添加JavaDoc注释。那么问题来了,JavaDoc注释是从哪来的呢?

首先不是由AI生成的,因为AI生成的文本不一定符合语义,并且较为缓慢,成本还高,需要联网,因为有上述缺点所以废弃了该方案。其次不是将字段文本使用各种「翻译」工具翻译过来的,因为翻译功能同样有不符合语义,较为缓慢,成本高,需要联网的缺点。然而插件中该功能的特点是,语义尽可能精确、速度快、不用联网,这是怎么做到的呢?

首先则怎么才能做到语义精确呢?自然是你曾经使用过这个字段,并且标注过这个字段的含义。你在使用IntelliJ IDEA打开一个Project时,IDEA会对该Project中的各个单词、文件名、文件类型等各种元素生成索引。

为什么IDEA中的搜索功能能够快速找到指定的元素,就是这些索引的功劳,当然索引不只能IDEA自己用,我们开发的插件也能用,具体可以参考Jetbrains的官方文档:

https://plugins.jetbrains.com/docs/intellij/file-based-indexes.html#implementing-a-file-based-index

当你对某个字段使用「查找JavaDoc」功能时,插件会检索到项目中的所有同名字段,通过精确或模糊匹配的方式,将所有相关的字段全都检索出来,然后把他们的JavaDoc注释全都提取出来,去重、输出就可以了。实际原理还是很简单的,过程看起来繁琐,但是执行效率极高哦,我监控过耗时,大概率不会超过1毫秒。

「填充」和「重新生成」的区别

插件中每个功能都有多个选项,填充、重新生成、合并,他们有什么区别呢?

b85022ba7dcc78ca24561ce82b16b19e.png 62d59036a37c52fde808a88fa5ad73fb.png
  • 填充: 当前「类、字段、方法」中已经存在指定的「注解、注释」时,不会再重新生成相应的「注解、注释」。

  • 重新生成: 不管当前「类、字段、方法」中是否已经存在指定的「注解、注释」,会将已存在的「注解、注释」直接删除,然后再重新生成相应的「注解、注释」。

  • 合并: 当前「类、字段、方法」中如果已经存在指定的JavaDoc注释,还是会重新生成新的JavaDoc注释,并将其合并到原先的JavaDoc中一起展示,新、老JavaDoc注释都会保留哦。

来源:juejin.cn/post/7286750827896029199


推荐全新学习项目

全新基于springboot+vue+vant的前后端分离的微商城项目,包括手机端微商城项目和后台管理系统,整个电商购物流程已经能流畅支持,涵盖商品浏览、搜索、商品评论、商品规格选择、加入购物车、立即购买、下单、订单支付、后台发货、退货等。功能强大,主流技术栈,非常值得学习。

线上演示:https://www.markerhub.com/vueshop

38632b90df4f78bf6cc0c70bb6a08249.jpeg

从文档到视频、接口调试、学习看板等方面,让项目学习更加容易,内容更加沉淀。全套视频教程约35小时共222期,讲解非常详细细腻。下面详细为大家介绍:

架构与业务

使用主流的技术架构,真正手把手教你从0到1如何搭建项目手脚架、项目架构分析、建表逻辑、业务分析、实现等。涵盖SpringBoot、Mybatis Plus、Jwt、Redis、Lombok、Hutool、Shiro、Elasticsearch、RabbitMq、Docker、Jenkins等技术。

vueshop微商城的整个购物流程已经完善,各个模块的业务都是已经实现,涵盖商品模块、搜索模块、购物车模块、订单模块、退款模块、后台权限模块、业务数据管理模块等

f08e5c1ace41ec5dd425ae3c52e1fe17.png

更多详情请查看:

手把手教学,从0开发前后端微商城项目,主流Java技术一网打尽!

手把手教学,从0开发前后端微商城项目,主流Java技术一网打尽!

手把手教学,从0开发前后端微商城项目,主流Java技术一网打尽!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要快速基于数据库生成实体类并自动加上swagger注解,可以采取以下步骤: 1. 首先,需要连接数据库,并读取数据库表的结构信息。可以使用数据库连接工具库如JDBC来连接数据库,使用相关API获取表的元数据信息。 2. 获取表的元数据后,可以通过遍历元数据来生成实体类。可以使用字符串拼接的方式,构建出实体类的代码。 3. 在生成实体类的过程中,需要根据元数据的类型和名称来决定实体类的字段类型和名称。根据元数据的类型,可以将数据库的数据类型转换为对应的Java类型。使用字符串拼接的方式,可以将字段类型、名称及其注解添加到实体类的代码中。 4. 在实体类中加入swagger注解,可以通过在生成实体类代码的过程中,根据表的元数据信息,判断是否应该添加swagger注解。根据元数据的属性,可以判断字段是否为必填项、字段的描述等。根据这些元数据属性,可以通过字符串拼接,将swagger注解的相关信息添加到实体类代码中。 5. 完成实体类的生成之后,可以将生成的实体类保存到指定的路径。可以使用IO操作将生成的代码保存为Java文件。 6. 最后,通过编译器编译生成Java文件,将其转换为字节码文件,并加载到JVM中即可。 通过以上步骤,可以快速基于数据库生成实体类,并自动加上swagger注解。这样可以方便地生成实体类代码,并为API文档的编写提供便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值