在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

一個(gè)無(wú)需注解的SpringBoot API文檔生成神器

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

JApiDocs是一個(gè)無(wú)需額外注解、開(kāi)箱即用的SpringBoot接口文檔生成工具。

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

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

無(wú)圖無(wú)真相,生成文檔的效果如下:

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

功能特性

1、代碼即文檔

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

2、支持導(dǎo)出HTML

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

3、同步導(dǎo)出客戶端Model代碼

支持導(dǎo)出Android端的 JavaiOS端的 Object C Model代碼,減少前端程序員的重復(fù)編碼工作。

4、更多特性

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

簡(jiǎn)潔的文檔

再好用的東西,如果沒(méi)有文檔說(shuō)明,別人也無(wú)從入手。為了讓大家盡快上手,JApiDocs準(zhǔn)備了一份極簡(jiǎn)的文檔說(shuō)明,確保你在幾分鐘就能用上JApiDocs。

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

  • 倉(cāng)庫(kù)地址:https://github.com/YeDaxia/JApiDocs
  • 中文文檔:https://japidocs.agilestudio.cn/#/zh-cn/

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

入門(mén)

支持JDK:1.8+

快速開(kāi)始

第一步:添加依賴

maven:

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

gradle:

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

你可以在任意一個(gè)main入口運(yùn)行下面的代碼:

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

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

編碼規(guī)范

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

你可以結(jié)合源碼中 SpringDemo 這個(gè)模塊來(lái)對(duì)照理解。

1. 添加必要的代碼注釋

其中類注釋會(huì)對(duì)應(yīng)到一級(jí)接口分組,你也可以通過(guò)@description來(lái)指定分組名稱;JApiDocs 會(huì)通過(guò) @param 來(lái)尋找接口參數(shù)和進(jìn)一步解析參數(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 端通過(guò)在 @param 參數(shù)后添加字段解釋或者在相關(guān)的JavaBean對(duì)象里面添加解釋:

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

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

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

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

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

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

比如上面的saveUser接口:

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

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

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

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

3. 接口對(duì)象在源碼中

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

高級(jí)配置

@ApiDoc

JApiDocs 默認(rèn)只導(dǎo)出聲明了@ApiDoc的接口,我們前面通過(guò)設(shè)置 config.setAutoGenerate(Boolean.TRUE) 來(lái)解除了這個(gè)限制。

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

當(dāng)@ApiDoc聲明在接口方法上的時(shí)候,它還擁有一些更靈活的設(shè)置,下面我們來(lái)看一下:

  • result: 這個(gè)可以直接聲明返回的對(duì)象類型,如果你聲明了,將會(huì)覆蓋SpringBoot的返回對(duì)象
  • url: 請(qǐng)求URL,擴(kuò)展字段,用于支持非SpringBoot項(xiàng)目
  • method: 請(qǐng)求方法,擴(kuò)展字段,用于支持非SpringBoot項(xiàng)目

例子:

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

如果你不想導(dǎo)出對(duì)象里面的某個(gè)字段,可以給這個(gè)字段加上@Ignore注解,這樣JApiDocs導(dǎo)出文檔的時(shí)候就會(huì)自動(dòng)忽略掉了:

例子:

publicclassUserForm{
@Ignore
privateBytegender;//性別
}

自定義代碼模板

JApiDocs 除了支持文檔導(dǎo)出,目前也支持生成了 Android 和 iOS 的返回對(duì)象代碼,對(duì)應(yīng) Java 和 Object-C 語(yǔ)言, 如果你想修改代碼模板,可以通過(guò)以下的方法:

第一步:定義代碼模板

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

第二步:選擇新的模板

通過(guò)DocsConfig配置模板路徑替換成新的模板:

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

添加更多功能

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

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

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

    關(guān)注

    2

    文章

    1500

    瀏覽量

    62011
  • HTML
    +關(guān)注

    關(guān)注

    0

    文章

    278

    瀏覽量

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

    關(guān)注

    8

    文章

    641

    瀏覽量

    29208
  • SpringBoot
    +關(guān)注

    關(guān)注

    0

    文章

    173

    瀏覽量

    178

原文標(biāo)題:一個(gè)無(wú)需注解的 SpringBoot API文檔生成神器,相當(dāng)哇塞!

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用SpringBoot集成Netty開(kāi)發(fā)個(gè)基于WebSocket的聊天室說(shuō)明

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

    Spring Boot的注解原理是什么

    @SpringBootApplication來(lái)看,發(fā)現(xiàn)@SpringBootApplication是個(gè)組合注解。 @Target(ElementType.TYPE) @Retention
    的頭像 發(fā)表于 08-27 09:24 ?2199次閱讀

    文檔生成工具:Doxygen生成

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

    如何設(shè)計(jì)個(gè)優(yōu)雅的API接口

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

    SpringBoot定時(shí)任務(wù)動(dòng)態(tài)管理通用解決方案

    SpringBoot的定時(shí)任務(wù)的加強(qiáng)工具,實(shí)現(xiàn)對(duì)SpringBoot原生的定時(shí)任務(wù)進(jìn)行動(dòng)態(tài)管理,完全兼容原生@Scheduled注解,無(wú)需對(duì)原本的定時(shí)任務(wù)進(jìn)行修改
    的頭像 發(fā)表于 02-03 09:49 ?782次閱讀

    什么是 SpringBoot?

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

    SpringBoot常用注解及使用方法1

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

    SpringBoot常用注解及使用方法2

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

    Springboot常用注解合集

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

    SpringBoot常用注解及原理

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

    SpringBoot的核心注解1

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

    SpringBoot的核心注解2

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

    springboot核心注解

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

    個(gè)注解搞定SpringBoot接口防刷

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

    SpringBoot核心注解由幾個(gè)注解組成

    等。本文將詳盡介紹這些核心注解。 @SpringBootApplication @SpringBootApplication 是個(gè)復(fù)合注解,包含了 @Configuration、@
    的頭像 發(fā)表于 12-03 15:09 ?760次閱讀
    主站蜘蛛池模板: 亚洲成人一级片| 欧美在线伊人| 久久性久久性久久久爽| 午夜国产精品久久影院| 久久伊人色| 天天操天天操天天| 色婷婷激情五月| 欧美天天性影院| 狠狠色狠狠色综合日日32| 成人久久精品| 草综合| 亚洲黄色小视频| 国产大乳喷奶水在线看| 午夜性福| 唐人社电亚洲一区二区三区| 人人搞人人爽| 欧美黑人粗硬大在线看| 成人国产精品一级毛片了| 天堂视频免费| 免费黄色福利| 亚洲理论视频| 人色网| 亚洲狠狠操| 成人网在线视频| 在线a亚洲老鸭窝天堂新地址| 99国产精品久久久久久久成人热| 四虎影院观看视频| 亚洲第一视频在线观看| 亚洲永久网站| 六月婷婷久久| wwwxxx亚洲| 日韩精品一级毛片| 欧美adc影院| 午夜伦伦| 天天爱夜夜| 亚洲色图综合| 一级骚片超级骚在线观看| 久久精品免费在线观看| 女人张开腿让男人做爽爽| 午夜96影视| 妖精视频亚洲|