0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

一個無需注解的SpringBoot API文檔生成神器

Android編程精選 ? 來源:TJ君 ? 2023-03-13 09:38 ? 次閱讀

JApiDocs是一個無需額外注解、開箱即用的SpringBoot接口文檔生成工具。

編寫和維護API文檔這個事情,對于后端程序員來說,是一件惱人但又不得不做的事情,我們都不喜歡寫文檔,但除非項目前后端代碼都是自己寫的,否則API文檔將是前后端協(xié)作中一個不可或缺的溝通界面。

既然不可避免,那就想辦法弄個輪子吧。人生苦短,必須偷懶。

無圖無真相,生成文檔的效果如下:

babe629c-c13b-11ed-bfe3-dac502259ad0.png

功能特性

1、代碼即文檔

JApiDocs是通過直接解析SpringBoot的源碼語法來工作的,所以只要Controller的語法符合一定的代碼規(guī)范,有合理的注釋,就可以直接導出文檔。

2、支持導出HTML

便捷的導航和接口查看界面;可本地預覽,或者部署到HTTP服務器。推薦部署到服務器,方便前后端展開協(xié)作。

3、同步導出客戶端Model代碼

支持導出Android端的 JavaiOS端的 Object C Model代碼,減少前端程序員的重復編碼工作。

4、更多特性

支持接口搜索;支持不同版本和英文文檔;自定義擴展等。

簡潔的文檔

再好用的東西,如果沒有文檔說明,別人也無從入手。為了讓大家盡快上手,JApiDocs準備了一份極簡的文檔說明,確保你在幾分鐘就能用上JApiDocs。

花5分鐘不到就能認識一個提高工作效率的工具,讓你把更多的時間花在更加有價值的事情上,你確認不看一下嗎?

  • 倉庫地址:https://github.com/YeDaxia/JApiDocs
  • 中文文檔:https://japidocs.agilestudio.cn/#/zh-cn/

支持接口搜索;支持不同版本和英文文檔;自定義擴展等。

入門

支持JDK:1.8+

快速開始

第一步:添加依賴

maven:

<dependency>
<groupId>io.github.yedaxiagroupId>
<artifactId>japidocsartifactId>
<version>1.3version>
dependency>

gradle:

compile'io.github.yedaxia1.3'
第二步:配置參數(shù)

你可以在任意一個main入口運行下面的代碼:

DocsConfigconfig=newDocsConfig();
config.setProjectPath("yourspringbootprojectpath");//項目根目錄
config.setProjectName("ProjectName");//項目名稱
config.setApiVersion("V1.0");//聲明該API的版本
config.setDocsPath("yourapidocspath");//生成API文檔所在目錄
config.setAutoGenerate(Boolean.TRUE);//配置自動生成
Docs.buildHtmlDocs(config);//執(zhí)行生成文檔

如果沒有意外,執(zhí)行完上面的代碼后,你就可以在配置的目錄中看到生成的文檔了。

編碼規(guī)范

JApiDocs是通過解析Java源碼來實現(xiàn)的,要使得JApiDocs正確工作,需要你在項目中的Controller書寫遵循一定的編碼規(guī)范。

你可以結(jié)合源碼中 SpringDemo 這個模塊來對照理解。

1. 添加必要的代碼注釋

其中類注釋會對應到一級接口分組,你也可以通過@description來指定分組名稱;JApiDocs 會通過 @param 來尋找接口參數(shù)和進一步解析參數(shù)的內(nèi)容。

/**
*用戶接口
*/
@RequestMapping("/api/user/")
@RestController
publicclassUserController{

/**
*用戶列表
*@paramlistForm
*/
@RequestMapping(path="list",method={RequestMethod.GET,RequestMethod.POST})
publicApiResult>list(UserListFormlistForm){
returnnull;
}

/**
*保存用戶
*@paramuserForm
*/
@PostMapping(path="save")
publicApiResultsaveUser(@RequestBodyUserFormuserForm){
returnnull;
}

/**
*刪除用戶
*@paramuserId用戶ID
*/
@PostMapping("delete")
publicApiResultdeleteUser(@RequestParamLonguserId){
returnnull;
}
}

如果提交的表單是 application/x-www-form-urlencoded 類型的key/value格式,你可以在 SpringBoot 端通過在 @param 參數(shù)后添加字段解釋或者在相關(guān)的JavaBean對象里面添加解釋:

//直接在java的@param注解中
@paramuserId用戶ID
//在FormBean對象中
publicclassUserListFormextendsPageForm{
privateIntegerstatus;//用戶狀態(tài)
privateStringname;//用戶名
}

這種格式對于到文檔中的參數(shù)描述將是表格的形式:

baf58cfe-c13b-11ed-bfe3-dac502259ad0.png

如果提交的表單是 application/json 類型的json數(shù)據(jù)格式,對應 SpringBoot 中的 @RequestBody 注解,在文檔中則是 json 格式顯示:

{
"id":"long//用戶ID",
"name":"string//用戶名",
"phone":"long//電話",
"avatar":"string//頭像",
"gender":"byte//性別"
}
2. 接口聲明返回對象

我們知道,如果Controller聲明了@RestController,SpringBoot會把返回的對象直接序列成Json數(shù)據(jù)格式返回給前端。JApiDocs也利用了這一特性來解析接口返回的結(jié)果,但由于JApiDocs是靜態(tài)解析源碼的,因此你要明確指出返回對象的類型信息,JApiDocs支持繼承、泛型、循環(huán)嵌套等復雜的類解析。

比如上面的saveUser接口:

/**
*保存用戶
*@paramuserForm
*/
@PostMapping(path="save")
publicApiResultsaveUser(@RequestBodyUserFormuserForm){
returnnull;
}

ApiResult表明了該接口返回的數(shù)據(jù)結(jié)構(gòu),經(jīng)過JApiDocs處理后是這樣的:

{
"code":"int",
"errMsg":"string",
"data":{
"userId":"string//用戶id",
"userName":"string//用戶名",
"friends":[
{
"userId":"string//用戶id",
"userName":"string//用戶名"
}
],
"readBooks":[
{
"bookId":"long//圖書id",
"bookName":"string//圖書名稱"
}
],
"isFollow":"boolean//是否關(guān)注"
}
}

如果你不是通過返回對象的形式,你也可以通過JApiDocs提供的@ApiDoc注解來聲明返回類型,你可以參考@ApiDoc章節(jié)的相關(guān)配置內(nèi)容。

3. 接口對象在源碼中

我們知道,經(jīng)過編譯后的 class 字節(jié)碼中是沒有注釋信息的,如果要通過反射字節(jié)碼的方式來實現(xiàn),則不可避免要引入運行時注解,這樣會增加使用成本, 考慮到這一點,JApiDocs 從第二個版本之后就改成了使用解析源碼的方式,而不是反射字節(jié)碼的思路來實現(xiàn)了,但這樣直接導致的缺陷就是:所有的 Form Bean (表單)對象和返回對象就必須在項目的源碼中,否則就無法解析了,如果你們項目的JavaBean對象是通過jar包的形式提供的, 那很遺憾,JApiDocs將無法支持。

高級配置

@ApiDoc

JApiDocs 默認只導出聲明了@ApiDoc的接口,我們前面通過設置 config.setAutoGenerate(Boolean.TRUE) 來解除了這個限制。

如果你不希望把所有的接口都導出,你可以把autoGenerate設置關(guān)閉,在相關(guān)Controller類或者接口方法上通過添加@ApiDoc來確定哪些接口需要導出。

@ApiDoc聲明在接口方法上的時候,它還擁有一些更靈活的設置,下面我們來看一下:

  • result: 這個可以直接聲明返回的對象類型,如果你聲明了,將會覆蓋SpringBoot的返回對象
  • url: 請求URL,擴展字段,用于支持非SpringBoot項目
  • method: 請求方法,擴展字段,用于支持非SpringBoot項目

例子:

@ApiDoc(result=AdminVO.class,url="/api/v1/admin/login2",method="post")
@Ignore

如果你不想導出對象里面的某個字段,可以給這個字段加上@Ignore注解,這樣JApiDocs導出文檔的時候就會自動忽略掉了:

例子:

publicclassUserForm{
@Ignore
privateBytegender;//性別
}

自定義代碼模板

JApiDocs 除了支持文檔導出,目前也支持生成了 Android 和 iOS 的返回對象代碼,對應 Java 和 Object-C 語言, 如果你想修改代碼模板,可以通過以下的方法:

第一步:定義代碼模板

把源碼中l(wèi)ibrary項目resources目錄下的代碼模板拷貝一份,其中,IOS_表示 Object-C 代碼模板,JAVA_開頭表示 Java代碼, 模板中類似${CLASS_NAME}的符號是替換變量,具體含義你可以結(jié)合生成的代碼進行理解,然后按照你想要的代碼模板進行修改即可。

第二步:選擇新的模板

通過DocsConfig配置模板路徑替換成新的模板:

docsConfig.setCodeTplPath("模板路徑");

添加更多功能

JApiDocs 提供了插件接口,你可以通過插件接口來實現(xiàn)更多豐富的功能,下面介紹如何添加插件:

第一步:實現(xiàn) IPluginSupport 接口
publicclassCustomPluginimplementsIPluginSupport{

@Override
publicvoidexecute(ListcontrollerNodeList){
//實現(xiàn)你自己的功能需求
}
}
第二步:添加插件
config.addPlugin(newCustomPlugin());
審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1461

    瀏覽量

    61489
  • HTML
    +關(guān)注

    關(guān)注

    0

    文章

    276

    瀏覽量

    32577
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    626

    瀏覽量

    28965
  • SpringBoot
    +關(guān)注

    關(guān)注

    0

    文章

    172

    瀏覽量

    145

原文標題:一個無需注解的 SpringBoot API文檔生成神器,相當哇塞!

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Java中常見的注解

    Annotation 注解(Annotation),也叫元數(shù)據(jù)。種代碼級別的說明。它是JDK1.5及以后版本引入的特性,與類、接口、枚舉是在同
    的頭像 發(fā)表于 09-30 15:35 ?482次閱讀
    Java中常見的<b class='flag-5'>注解</b>

    如何使用SpringBoot集成Netty開發(fā)基于WebSocket的聊天室說明

    文檔的主要內(nèi)容詳細介紹的是基于SpringBoot,借助Netty控制長鏈接,使用WebSocket協(xié)議做一個實時的聊天室。
    發(fā)表于 05-29 17:56 ?1次下載
    如何使用<b class='flag-5'>SpringBoot</b>集成Netty開發(fā)<b class='flag-5'>一</b><b class='flag-5'>個</b>基于WebSocket的聊天室說明

    文檔生成工具:Doxygen生成

    有了配置文件后我們完全可以通過命令行來生成API文檔,假設配置文件名為Doxyfile,那么我們只需要執(zhí)行doxygen /path/to/Doxyfile即可生成
    的頭像 發(fā)表于 04-27 09:15 ?2081次閱讀

    如何設計優(yōu)雅的API接口

    種是API接口提供方給出AK/SK兩值,雙方約定用SK作為簽名中的密鑰。AK接口調(diào)用方作為header中的accessKey傳遞給API接口提供方,這樣
    的頭像 發(fā)表于 12-20 14:23 ?1478次閱讀

    SpringBoot定時任務動態(tài)管理通用解決方案

    SpringBoot的定時任務的加強工具,實現(xiàn)對SpringBoot原生的定時任務進行動態(tài)管理,完全兼容原生@Scheduled注解,無需對原本的定時任務進行修改
    的頭像 發(fā)表于 02-03 09:49 ?691次閱讀

    什么是 SpringBoot

    本文從為什么要有 `SpringBoot`,以及 `SpringBoot` 到底方便在哪里開始入手,逐步分析了 `SpringBoot` 自動裝配的原理,最后手寫了
    的頭像 發(fā)表于 04-07 11:28 ?1182次閱讀
    什么是 <b class='flag-5'>SpringBoot</b>?

    SpringBoot常用注解及使用方法1

    基于 SpringBoot 平臺開發(fā)的項目數(shù)不勝數(shù),與常規(guī)的基于`Spring`開發(fā)的項目最大的不同之處,SpringBoot 里面提供了大量的注解用于快速開發(fā),而且非常簡單,基本可以做到開箱即用! 那
    的頭像 發(fā)表于 04-07 11:51 ?587次閱讀

    SpringBoot常用注解及使用方法2

    基于 SpringBoot 平臺開發(fā)的項目數(shù)不勝數(shù),與常規(guī)的基于Spring開發(fā)的項目最大的不同之處,SpringBoot 里面提供了大量的注解用于快速開發(fā),而且非常簡單,基本可以做到開箱即用!
    的頭像 發(fā)表于 04-07 11:52 ?554次閱讀

    Springboot常用注解合集

    前幾章,在系統(tǒng)啟動類里面,都加入了此啟動注解,此注解組合注解,包括了`@SpringBootConfiguration`、`@EnableAutoConfiguration`和`@
    的頭像 發(fā)表于 04-07 14:27 ?646次閱讀
    <b class='flag-5'>Springboot</b>常用<b class='flag-5'>注解</b>合集

    SpringBoot常用注解及原理

    SpringBootConfiguration繼承自@Configuration,二者功能也致,標注當前類是配置類, 并會將當前類內(nèi)聲明的或多個以@Bean注解標記的方法的實例納
    的頭像 發(fā)表于 04-07 14:30 ?509次閱讀

    SpringBoot的核心注解1

    今天跟大家來探討下SpringBoot的核心注解@SpringBootApplication以及run方法,理解下springBoot為什么不需要XML,達到零配置
    的頭像 發(fā)表于 04-07 14:34 ?607次閱讀
    <b class='flag-5'>SpringBoot</b>的核心<b class='flag-5'>注解</b>1

    SpringBoot的核心注解2

    今天跟大家來探討下SpringBoot的核心注解@SpringBootApplication以及run方法,理解下springBoot為什么不需要XML,達到零配置
    的頭像 發(fā)表于 04-07 14:34 ?1870次閱讀
    <b class='flag-5'>SpringBoot</b>的核心<b class='flag-5'>注解</b>2

    springboot核心注解

    Spring Boot 是基于 Spring 框架的開源框架,它可以幫助開發(fā)者快速構(gòu)建、部署和運行獨立的、生產(chǎn)級的 Spring 應用程序。Spring Boot 提供了系列核心注解,這些注解可以
    的頭像 發(fā)表于 11-23 09:23 ?425次閱讀

    注解搞定SpringBoot接口防刷

    技術(shù)要點:springboot的基本知識,redis基本操作,
    的頭像 發(fā)表于 11-28 10:46 ?341次閱讀

    SpringBoot核心注解由幾個注解組成

    等。本文將詳盡介紹這些核心注解。 @SpringBootApplication @SpringBootApplication 是復合注解,包含了 @Configuration、@
    的頭像 發(fā)表于 12-03 15:09 ?564次閱讀