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

IntelliJ IDEA中生成指定模板的JavaDoc 介绍如何使用JavaDoc插件完成类似Eclipse AutoJavaDoc功能。 1、安装JavaDoc插件 2、如下配置JavaDoc插件 3、编辑自定义的JavaDoc,在每个Template之中加入“ * @since ${PROJECT_NAME} project_version” 4、在代码中按Alt+Inert选择生成指定或所有元素(方法和字段)的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技术一网打尽!

Apipost IDEA 插件使用说明 Apipost Helper作为IDEA插件,可以快速生成和查询API文档,直观友好地在IDE中调试接口。Apipost Helper提供了诸多便捷功能,如通过代码查找接口或者通过接口查找代码等,可以帮助我们高效调试API并一键生成文档。在使用Apipost IDEA 前需要在IDEA设置中进行简单的配置,包括设置云端域名和获取请求token,这些步骤并不复杂,且一次配置后,即可长期享受其带来的便利。安装 Apipost Helper 后点击右侧角标可打开接口树管理区,可进行接口调试、接口快速定位等操作。 阅读详情

相关推荐

IDEA插件Apipost-Helper实战:5分钟搞定SpringBoot接口调试与文档生成

本文详细介绍了如何在IDEA中通过Apipost-Helper插件,高效完成SpringBoot接口调试与文档生成。该插件深度集成开发环境,能自动解析代码注解、智能填充请求参数,并支持一键生成同步API文档,将调试、文档与协作工作流无缝融合,极大提升开发效率。

seed的博客 420

Spring小知识(4):手把手教你从0开始配置idea中swagger,全步骤配图文版。

Swagger 是一组用于设计、构建、文档化和使用 RESTful Web 服务的开源工具和框架。它允许开发团队设计、构建和测试 API,并提供易于理解的文档,以便开发人员和消费者能够快速了解和使用 API。Swagger 通常与各种编程语言和框架一起使用,以简化 API 的开发和维护过程。

jialuosi的博客 1万+

IntelliJ IDEA插件实现Spring Boot接口自动同步YApi文档

在Java Web开发中,API接口文档是前后端协作的关键桥梁。传统手动维护文档的方式效率低下且易出错,而自动化文档同步技术通过解析代码中的元数据注解,实现了文档与代码的实时同步。其核心原理是利用IDE的抽象语法树(AST)解析能力,识别Spring MVC和Swagger等框架注解,提取接口路径、参数和响应结构,再通过API调用同步到YApi等文档平台。这种技术显著提升了开发效率和文档准确性,特别适用于Spring Boot技术栈的团队协作场景。本文介绍的EasyApi插件正是这一理念的实践,它让开发者能

weixin_34138056的博客 383

简单易懂的Swagger入门----idea版

超级简单入手的swagger教程 准备环境: jdk----1.8 maven-----3.5 idea------2018 本次入门教程使用的是springboot结合maven,对swagger的简单入门教程,包括简单接口的编写、测试等;非常适合初学者。 一、创建springboot工程 1、创建工程 下面名称自己定义即可。 下面这里选择web-springWeb,有的版本就叫web 最后一步,直接finish即可。 2、配置maven环境 具体配置方法可以看一下我的上一篇:idea构建MaB

夏呆毛的博客 3368

IDEA插件实现Spring Boot接口自动同步YApi:原理、配置与避坑指南

在前后端分离架构中,API接口文档是团队协作的核心契约。其核心原理在于通过解析代码抽象语法树(AST)提取接口元数据,并转换为目标平台的文档模型。这项技术的核心价值在于将文档维护从手动、滞后的人工流程,转变为自动化、实时同步的工程实践,从而显著提升开发效率并保障契约一致性。其典型应用场景是使用Spring Boot等框架的中大型Java团队,需要将IDE中编写的接口代码与YApi等接口管理平台进行同步。本文以EasyApi插件为例,深入解析了如何通过IDEA插件实现Spring Boot接口到YApi的自动

axfcjwkbi259888707的博客 378

idea生成swagger注解插件,最新版23.2也能用

根据字段上的doc注释生成swagger注解 @ApiModelProperty(value = "当前登录人名称") 快捷键 ctrl+n \command+n \右键Generate 打开generate页面,选择swagger

如何在IDEA中一键生成API文档:API Savior完整指南

API Savior是一款专为Java开发者设计的IntelliJ IDEA插件,它能根据代码注释一键生成高质量的API接口文档。无论是RESTful API还是Dubbo接口,这个强大的工具都能帮助你告别手动编写文档的繁琐工作,让API文档生成变得简单高效。通过智能解析Java代码和注释,API Savior为你提供完整的文档解决方案,提升开发效率和团队协作体验。 ## 🚀 项目亮点速览

gitblog_00480的博客 478

IDEA 插件 IDEA ORM 代码生成插件,支持 Swagger

IDEA ORM 代码生成插件,支持 Swagger 。 该项目是从idea-plugins中孵化出来的项目。该插件是从个人插件中心孵化出来的,已经可以独立使用了,目前在idea的官方插件市场已经有挺多人在使用; 该插件是用于快速生成ORM层代码的插件

如何通过API Savior插件一键生成高质量接口文档:3大核心优势详解

API Savior是一款专为Java开发者打造的IntelliJ IDEA和Android Studio插件,它能够根据代码注释自动生成高质量的API接口文档,支持Restful和Dubbo接口,不仅兼容Swagger注解,还提供了更多强大的功能。对于需要频繁编写和维护接口文档的开发者来说,这个插件可以节省大量时间和精力。 ## 🚀 核心功能:让文档生成变得简单高效 ### 一键生成接口文

gitblog_00388的博客 391

告别Modern Standby噩梦:Win11睡眠断网冻结的根源剖析与S3睡眠回归实战

本文深入剖析了Windows 11中Modern Standby(现代待机)模式导致睡眠后断网、系统冻结等问题的根源,指出其与硬件驱动、后台活动的兼容性矛盾。文章提供了通过修改注册表键值强制系统回归稳定S3睡眠状态的详细实战步骤,帮助用户彻底解决睡眠故障,实现可靠的远程访问与挂机任务。

weixin_29210727的博客 610

SARScape实战:集成GACOS数据优化InSAR大气校正全流程

本文详细介绍了如何在SARScape软件中集成GACOS数据,以优化InSAR大气校正的全流程。通过实战步骤,从GACOS数据申请、下载、导入,到在单景干涉图和SBAS-InSAR流程中应用,有效剥离大气相位延迟,显著提升形变监测结果的精度与可靠性,实现从“雾里看花”到“拨云见日”的转变。

weixin_28419039的博客 402

sentence-transformers MS MARCO v2 模型详解:基于 Bing 真实查询训练的语义检索双编码器

MS MARCO(Microsoft MAchine Reading COmprehension)是一个基于 Bing 搜索引擎真实用户查询构建的大规模信息检索语料库。本文围绕仓库中的 [docs/pretrained-models/msmarco-v2.md](https://link.gitcode.com/i/89d4ea59a5915a25c590a62edbf9bef8) 展开,系统介绍

gitblog_00853的博客 505

Upload Symbols Failed:The archive did not include a dSYM for the LiveKitWebRTC.framework with the UU

你需要从源码构建 LiveKitWebRTC,而不是使用 CocoaPods 安装的预编译 .xcframework。Step 2: 修改 Podfile 使用本地路径引用(不是从源下载的 xcframework)方法 :强制从源码构建 LiveKitWebRTC.framework(推荐)这样它就会编译 WebRTC 并带上正确 UUID 的 dSYM。替换路径为你 clone 下来的 LiveKit 源码位置。Step 1: 克隆源码仓库。

baidu_40537062的博客 2138

IDEA 插件 Trae AI 全攻略

TraeAI是一款专为Java开发者打造的IDEA插件,通过AI技术显著提升开发效率。文章全面介绍了TraeAI的核心功能和使用方法,包括代码生成、解释、优化、测试生成等基础功能,以及10个典型开发场景的实战应用。TraeAI深度集成IDE,支持本地模型部署,能理解项目上下文,帮助开发者快速搭建项目骨架、重构旧代码、调试异常等。

果酱 の 博客 2万+

NET 实战:30 天搞定企业级 Web 订餐系统(附完整源码 + 数据库设计)

订餐流程:浏览菜品 → 选择菜品及数量 → 填写送餐地址 → 提交订单 → 数据库记录核心代码(绑定菜品列表):vb' 绑定菜单表到DataGrid控件,展示菜品信息user id=sa;' 查询菜品名称、价格、口味Dim adpt1 As New SqlDataAdapter("select cdishid,vdishname 菜品名称,cdishrate 价格,vdishdescription 口味 from dish", conn)End Sub用户体验优化。

m0_67740236的博客 1517

Lucene学习总结之二:Lucene的总体架构

Lucene总的来说是: 一个高效的,可扩展的,全文检索库。 全部用Java实现,无须配置。 仅支持纯文本文件的索引(Indexing)和搜索(Search)。 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。 在Lucene in action中,Lucene 的构架和过程如下图, 说明Lucene是有索引和搜索的两个过程,包

forfuture1978的专栏 1万+

Folia跨设备同步完整教程:sync-server让主题与外观处处一致

Folia 是一款专注于绚丽歌词动画效果的本地音乐播放器,支持 Navidrome 与网易云、QQ、酷狗等多平台在线音乐。它的官方同步服务 **sync-server** 可以把你在不同设备上精心调好的 **AI 主题** 和 **外观设置** 同步到同一账号下所有设备,真正做到「主题与外观处处一致」。本文为面向新手的 Folia 跨设备同步完整教程:先部署一个免费、免运维的同步服务,再在客户端两

gitblog_00796的博客 511

在armv8架构中,有哪些是serror

(3)、RAS(Reliability, Availability, and Serviceability)错误:一些对于系统的可靠性、可用性和可维护性有影响的错误可能会触发 SError。(2)、ECC(Error Correction Code)错误:在访问带有错误校验的内存(如ECC内存)时,如果发现错误校验失败,可能会产生SError。2、其实呢,大多数Serror都是实现定义的,真正实现的serror就没有多少个。Serror(也称System Error),是异步异常的一种,一般是来自。

baron-周贺贺-代码改变世界ctw 1013

miniserve 版本演进全解析:从简单 HTTP 文件服务到 WebDAV、TLS 与安全加固的完整技术图谱

> **导读**:本文以 miniserve(当前仓库版本 0.35.0)的 [CHANGELOG.md](https://link.gitcode.com/i/349a4e8fa5ffb8abc9badea9963ee172) 为核心脉络,逐版本梳理这个「一行命令即可把任意目录变成 HTTP 文件服务器」的 Rust 工具从 0.5.0 到 0.35.0 的能力演进、安全修复与架构变迁。读完本文

gitblog_00199的博客 477

QT里获取UUID当做唯一文件名称

QT里获取UUID当做唯一文件名称

547

【C语言趣味教程】(0) 专栏介绍

这是一套C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅!本专栏保证篇篇精品,继续保持本人一贯的幽默式写作风格,当然,在有趣的同时也同样会保证文章的质量,旨在能够产出"有趣的干货" !本系列教程不管是零基础还是有基础的读者都可以阅读,可以先看看目录!标题前带星号 (*) 的部分不建议初学者阅读,因为内容难免会超出当前章节的知识点,面向的是对 C 语言有一定基础或已经学过

有道无术, 术尚可求。有术无道, 止于术。 2万+
上一篇: 一套资料吃透 Spring Boot+MySQL+Redis……
下一篇: 一个基于SpringCloud的实战项目,堪称最佳实践!
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值