专栏名称: Java知音
专注于Java,推送技术文章,热门开源项目等。致力打造一个有实用,有情怀的Java技术公众号!
目录
相关文章推荐
独角兽智库  ·  中期震荡上行,留意结构交易过热 ·  2 天前  
辽宁发布  ·  新闻发布会丨2024年全省经济运行情况及20 ... ·  2 天前  
辽宁发布  ·  新闻发布会丨2024年全省经济运行情况及20 ... ·  2 天前  
济南都市频道  ·  女子酒店泡澡遭无人机偷拍?刚刚,三亚警方通报 ·  3 天前  
济南都市频道  ·  女子酒店泡澡遭无人机偷拍?刚刚,三亚警方通报 ·  3 天前  
51好读  ›  专栏  ›  Java知音

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

Java知音  · 公众号  ·  · 2024-05-07 10:05

正文

戳上方蓝字“ Java知音 ”关注我

下面是一个普通的 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注解更简单了,就是无脑的对字段按顺序进行编号,只要保证编号的顺序是递增的且不重复即可。

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

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

简单来说,我写了一个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 ,将语言切换到中文(插件考虑到了国际化,所以默认英文哦😉)。

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

核心功能

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

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

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

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

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

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

  • 删除JavaDoc注释

  • 删除刚刚生成的Swagger注解

  • 填充JavaDoc注释

  • 填充Swagger注解

整个操作行云流水~~~

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

除了对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」这个功能。

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

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

功能释义

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

删除元素

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

插件在展示选项前,会检测当前项目是否有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注解







请到「今天看啥」查看全文