JApiDocs真香:以後再也不想用Swagger了

2021-01-15 馬家軍談Java

來源:https://mp.weixin.qq.com/s/XgC6fBB_RlwxTNthk5kEAQ

1. 概述

Swagger最麻煩的就是需要在 Controller 上添加一堆 @ApiOperation、@ApiOperation 註解,對代碼有一定的侵入性。今天,筆者推薦一個不需要加註解的解決方案。

抱大腿

這就是 JApiDocs ,它可以基於 Controller上的 Java 注釋,直接生成接口文檔。效果如下圖所示:

效果圖

友情提示GitHub 地址是:https://github.com/YeDaxia/JApiDocs 。

2. 快速入門

看完了 JApiDocs 生成的接口文檔的效果,我們一起來快速入門下。完整的示例項目,可見 https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-24/lab-24-apidoc-japidocs 地址,代碼如下圖所示:

項目代碼

下面,我們來瞅一瞅如何使用~

2.1 引入依賴

在 pom.xml 文件中,引入 japidocs 的依賴。

<dependency> <groupId>io.github.yedaxia</groupId> <artifactId>japidocs</artifactId> <version>1.4.4</version></dependency>2.2 創建 JApiDocs 配置

創建 TestJApiDocs 類,作為 JApiDocs 的配置,生成接口文檔。代碼如下:

public class TestJApiDocs { public static void main(String[] args) { // 1. 創建生成文檔的配置 DocsConfig config = new DocsConfig(); config.setProjectPath("/Users/yunai/Java/SpringBoot-Labs/lab-24/lab-24-apidoc-japidocs"); // 項目所在目錄 config.setDocsPath("/Users/yunai/Downloads/"); // 生成 HTML 接口文檔的目標目錄 config.setAutoGenerate(true); // 是否給所有 Controller 生成接口文檔 config.setProjectName("示例項目"); // 項目名 config.setApiVersion("V1.0"); // API 版本號 config.addPlugin(new MarkdownDocPlugin()); // 使用 MD 插件,額外生成 MD 格式的接口文檔 // 2. 執行生成 HTML 接口文檔 Docs.buildHtmlDocs(config); }}偷懶艿:代碼比較簡單,胖友看下注釋,秒懂~

稍後,我們執行 #main(...) 方法,就可以使用 JApiDocs 生成接口文檔。

2.3 代碼注釋

JApiDocs 是通過解析 Controller 源碼上的 Java 注釋,所以我們需要在相關的類、方法、屬性上,進行添加。示例代碼如下圖:

Java 類

UserControllerUserCreateReqVOUserListReqVOUserRespVO2.4 簡單測試

示例項目搭建完成,我們來簡單測試下。

① 執行 TestJApiDocs 類,生成 JApiDocs 接口文檔。結果如下圖所示:

生成結果

② 點擊 index.html 文件,查看 HTML 接口文檔。如下圖所示:

HTML 接口文檔

後續,我們可以部署到 Nginx 下,提供給前端小夥伴查看接口文檔。

③ 點擊 *-api-docs.md 文件,查看 Markdown 接口文檔。如下圖所示:

Markdown 接口文檔

3. 高級用法

本小節,我們來學習下 JApiDocs 的高級用法。

友情提示:在 99.99% 的場景下,不會使用到,所以胖友可以選擇忽略不看。如果使用到,請胖友直接去錘死狗芳。

JApiDocs 自定義了 @ApiDoc 和 @Ignore 註解,用於針對指定接口,進行自定義的配置。下面,我們來瞅一瞅哦。

良心艿:可能會有胖友說,JApiDocs 的註解不是和 Swagger 的註解一樣,也對代碼有入侵嗎?確實是的,但是比 Swagger 的註解入侵性會低一些,並且基本不需要使用到。

3.1 @ApiDoc 註解

@ApiDoc 註解,聲明在接口方法上,通過它的四個屬性,進行靈活配置。

result 屬性:直接聲明返回結果的類型。如果你聲明了,將會覆蓋方法返回結果的類型。stringResult 屬性:返回字符串。在返回結果比較簡單,而不想創建一個專門的返回類,則可以考慮使用這個屬性。友情提示:建議返回結果是否簡單,還是創建一個對應的返回類,可維護性更好。url 屬性:請求 URL。擴展欄位,用於支持非 SpringMVC 的項目。友情提示:JApiDocs 提供了 SpringControllerParser 類,支持解析 SpringMVC 的註解。對於一些老項目,例如說使用 Struts 框架,則需要通過 url 屬性來聲明。當然,更加推薦自定義一個針對 Struts 的 Parser 解析器,每個接口都手寫,挺麻煩的。method 屬性:請求 Method。擴展欄位,用於支持非 SpringMVC 項目。@ApiDoc 註解還有一個作用,聲明該接口需要導出文檔。不過因為一般我們會設置 DocsConfig 的 autoGenerate 屬性為 true,默認導出所有 Controller 的接口文檔,所以無需使用它。

具體的使用示例如下:

// 示例一@ApiDoc(result = AdminVO.class, url = "/api/v1/admin/login2", method = "post")// 示例二:針對 `stringResult` 屬性@ApiDoc(stringResult = "{code: 0, data: 'success'}")@GetMapping(value = "custom-json")public Map customJsonResult() {}3.2 @Ignore 註解

@Ignore 註解,比較好理解,實現接口或欄位的忽略。

具體的使用示例如下:

// 示例一:聲明在 Controller 類上,忽略該 Controller 的所有接口@Ignorepublic class UserController {}// 示例二:聲明在接口方法上,忽略該接口@Ignore@PostMapping("save")public ApiResult saveUser() {}// 示例三:聲明在接口使用到的對象的屬性上,忽略該屬性public class UserCreateReqVO { @Ignore private Integer age; }3.3 @description 注釋

通過 @description 注釋,主要有兩種使用場景。

友情提示:由於 @description 注釋不是 Java 注釋中自帶的標籤,所以 IDEA 會存在黃色報警的情況,需要手動添加下,去除告警。

① 在 Controller 類上使用 @description 注釋,將會作為該 Controller 在接口文檔上的導航標題,而不會使用上面的注釋內容。示例代碼如下:

/** * 用戶 Controller,提供用戶基本信息的 CRUD 的功能 * * @description 用戶 API */@Controllerpublic class UserController {}② 在接口方法上使用 @description 注釋,則可以在接口方法下面額外添加一行說明。示例代碼如下:

/** * 獲得用戶列表 * * @param listReqVO 列表篩選條件 * @return 用戶列表 * @description 不同的前端界面,可能有不同的查詢訴求,通過該接口統一滿足。 */@GetMapping("list")public List<UserRespVO> list(UserListReqVO listReqVO){ return null;}

相關焦點

  • 利用yii2和swagger打造完美的RestFul Api接口
    技術人員照著此文,可以直接搭建一個yii2和swagger結合的RestFul風格的API接口平臺!第一步:本地搭建yii2項目(以basic基礎項目為準)php composer.phar create-project yiisoft/yii2-app-basic basic -vvv運行以上命令,用composer安裝的方式,在本地搭建一個yii2項目。
  • 用高壓水槍衝洗後,再也不想碰了!
    用高壓水槍衝洗後,再也不想碰了!高壓水槍是一種我們生活中比較常見的工具,在我們洗車的時候,洗車工就會用高壓水槍對我們的汽車表面進行清理,打好了清潔劑的汽車表面,只需要用高壓水槍衝洗兩三分鐘,汽車就光潔如新了,就連縫隙裡的泥垢都能清洗的一乾二淨。
  • 吃過這種「童子雞」,再也不想肯德基,餵五穀,散養的就是好吃!
    吃過這種「童子雞」,再也不想肯德基,餵五穀,散養的就是好吃!肉類食材種類很多,其中雞肉是最受歡迎的一種,它的味道好吃,營養豐富,滋補效果好,而且脂肪含量低,健康美味,好吃還不怕發胖,並且老少皆宜,深得大家的喜歡。
  • Swagger天天用,但它背後的實現原理很多人都不知道!
    springfox-swagger 是基於 Spring 生態系統的該規範的實現。springfox-swagger-ui 是對 swagger-ui 的封裝,使得其可以使用 Spring 的服務。由於工作中遇到需要基於 Swagger Json 做一些處理,但 Swagger Json 的格式不是那麼滿足需求。
  • 我們天天說的,「真香」「我酸了」用英語怎麼說?
    我們看彈幕,看評論的時候,經常會見到「真香」「我酸了」真樣的網絡用詞,在我們的生活中,也會這樣表達,但是用英語應該怎麼表達,你會嗎?今天,趣趣君就和大家一起看一看。NO.1「真香」英語怎麼說?so delicious?
  • 自製紙包魚魚肉鮮嫩,蒜香濃鬱,香辣味十足,學會再也不去外面吃
    自製紙包魚,蒜香濃鬱,魚肉鮮嫩,香辣味十足,做法簡單,學會再也不去外面吃了。紙包魚的做法起源於川渝大地,在這幾年很是火熱,相比於傳統的碳烤來講,它結合了韓國紙上烤肉和傳統萬州烤魚的特色,很受大眾喜愛。【所需食材】草魚一條、洋蔥、蒜、金針菇、土豆、娃娃菜、蔥、郫縣豆瓣醬、少許火鍋底料【製作方法】1.魚肉清洗乾淨,用料酒醃製15分鐘左右去除腥味。
  • 逃不掉的「真香定律」?
    何謂「真香」定律 大言不慚立下flag 隨後用實際行動否決自己之前的想法 「真香」與「打臉」 似乎有異曲同工之妙 很多人都逃不過「真香定律」
  • 真香定律是什麼梗 王境澤定律真香是什麼意思出自哪裡
    「真香定律」是什麼梗?  在抖音中最近很多人都比較喜歡評論「真香定律」,不過很多人可能還不知道這個真香定律是什麼意思,下面我們就一起來了解下這個梗的意思以及出處吧。真香定律是什麼梗  這個估計是2018最熱門的一個梗,這個梗主要來自於參加湖南衛視《變形記》裡的一位主人翁王境澤,當初王境澤去變形計時的梗,到了農村後說我就算從這跳下去,摔死在這裡也不會吃你們一口飯一口水。然後晚上就餓的吃起了飯,還說了句,真香。所以後來就有了真香這個梗。
  • 【臭臭】煲仔飯,真香!
    為了尋求刺激,我們尋找了幾樣「真香」配料:螺螄粉、臭豆腐、榴槤。欲知口味如何,且聽我細細說來。挖一勺冰激凌質感般的果肉和焦香的米飯攪拌,慢食咀嚼會嘗到清甜的米香和濃鬱的果肉香在嘴巴交織纏綿。 為了不讓我的砂鍋短時間內打入冷宮,我選擇用這袋「流量」延長我使用砂鍋的次數。還真別說,用砂鍋煮出的螺螄粉更有味,恆溫特性也讓粉絲保持了滾燙的熱度。 但要記得從灶爐取下砂鍋後,要放在木製鍋墊或鐵架上,以防砂鍋接觸冰冷臺面發生炸裂。
  • 車頂的「鯊魚鰭」有什麼用?老司機:看起來「雞肋」,用起來真香
    車頂的「鯊魚鰭」有什麼用?老司機:看起來「雞肋」,用起來真香!在使用汽車的時候,我們需要不斷的與汽車進行摩擦,而輪胎也要與地面不斷的進行摩擦,此時就會產生大量的靜電,如果不趕緊的把靜電排出車外,開車的時候就會時不時的被電一下,可能並不會對我們造成嚴重的威脅,但是多次被電難免會有些不舒適。
  • 「真香」英語怎麼說?so delicious?別鬧!
    用手機看視頻的時候 總有這樣的彈幕: 真香預警,真香預告,真香~ 那「真香」什麼意思?英語怎麼說? 難道要說so delicious嗎?
  • 真香定律你了解多少
    (正經臉)所謂的真香定律:真香定律(the L .aw of Delicious),是由我國著名心理學家、數學家王境澤(WangJingze)提出的一項著名的永恆定律,其具體內容即&34;。經研究表明,在正常情況下沒有任何一個具有動能的單個生物體能違反真香定律。2014年6月,王境澤為了得出真香定律的公式,帶領助手進入中國西部的偏遠山區進行研究。為了快速得出公式,不惜以&34;為實驗代價進行快速推理。
  • 動森鱸魚,再也不想見到這種沒有良心的魚!
    三體社區特約科幻作家 吳霜青年科幻作家、編劇、科幻活動家全球華語科幻星雲獎獲獎作者代表作《雙生》《捏臉師》0 1 再也不想見到這種沒有良心的魚!眾所周知,我是科幻作家裡最會做飯的。前幾天,我想請朋友到家裡吃飯。考慮到疫情期間,大家的體重都不太樂觀;我便自信地發去了近期常做的菜——清蒸鱸魚的圖片。
  • 孔雪兒去陳赫火鍋店吃飯,聽到她吃完後的評價,再也不想去了!
    孔雪兒去陳赫火鍋店吃飯,聽到她吃完後的評價,再也不想去了!也實在是讓網友們不敢相信呢,而且再一次的讓大家對陳赫的火鍋店產生了反感,因為陳赫真的過度的宣傳他的火鍋店了,而且娛樂圈中開火鍋店的明星又不止他一家,但是人家都非常低調的在營業,而陳赫卻大肆的宣揚這種,佔用明星和網紅的熱度來為自己謀利,就讓人覺得很不厚道,有點欺騙消費者的感覺呢,都表示以後再也不想去了。
  • 首批iPhone11用戶體驗:信號差、發燙嚴重,卻難逃「真香」定律
    因為創新點少,所以新iPhone相信用過幾天之後,新鮮勁頭也就過去了。那麼問題來了,首批iPhone11用戶的使用體驗怎麼樣呢?筆者發現,在社交媒體上,關於iPhone11系列吐槽最為激烈的,當屬信號差、發燙嚴重、卡頓等問題。不少用戶表示,蘋果手機沒有以前那麼好用了,高昂的金錢代價,並沒有換來預期中的手機產品,似乎蘋果的魔力也正在一點點地消失。
  • 達爾文遊戲:基友救男主便當,真慘;開局就送老婆,真香
    這部動畫的劇情或架構有點老套,但是女主真的很香。動畫講述的是有一個遊戲APP,下載加入後會得到一個超能力,但是沒辦法主動退出遊戲。遊戲內容是多人互相戰鬥。不過從第一集的部分內容中我們可以看出基本上應該是生存遊戲,戰鬥開始後目標就是把對手幹掉。男主角須藤要剛開始就不小心下載並進入這個APP,並且還沒搞清楚遊戲機制就被「新人殺手」盯上。
  • 韓國景點用中文標語提示,中國遊客看了之後表示再也不想去了
    在韓國的一些景點上也看到是用中文書寫的標誌,但是看了之後很讓人不舒服。甚至有些中國遊客表示再也不想去了。就如這張標誌牌,說的話也不客氣,還這麼強硬。為什麼不舍垃圾桶?產生的垃圾還要自己裝著,否則還要罰款。有些遊客之所以不想再去韓國旅遊主要就是平時在國內的景點逛習慣了,因為國內的景點都設有垃圾桶,而韓國沒有,所以覺得不習慣。
  • 沒人逃得了王境澤的「真香」定律!
    「沒人逃得了王境澤真香定律」。還有人不知道這個梗嗎?「真香」這個梗是出自某真人秀,東北小夥王境澤到山裡體驗生活,一開始表示絕對不會接受寄宿家庭提供的食物,後來在奶奶的勸說,以及飢餓的驅使下,捧起碗大口大口地吃飯,並說道:「真香。」
  • 結婚第五年,丈夫不要我了,他如是說:以後再也不用做舔狗了
    拿到離婚證那天,丈夫嘆息地對我說:以後再也不用做舔狗了。其實,我還是比較愛丈夫的,或許,只是想讓他重視我,所以,在生活中,我總是不斷的要求他為我做這做那。另外,在成長過程中,或因為父母溺愛的緣故,使得我在做家務層面就是「小白鼠」。在丈夫向我提離婚的時候,他將自己這些年為我的付出統統列舉了一遍,並問我:你又為我做過什麼?
  • 3.15手機圈打臉大會,世人難逃真香定律
    有位偉大的「鬱言家「曾經說過:人類逃不過真香定律。然而這個定律是如此強大,再加上人類自己不注意(或者說選擇性忘記?),不斷有人陷入這個定律,慘遭打臉,接下來就讓小編為大家盤點一下國產手機圈的一些著名的」大佬「被打臉事件。