<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          你還在用絲襪哥(Swagger)?今天不如換換口味!

          共 3183字,需瀏覽 7分鐘

           ·

          2020-10-01 03:14

          今天給大家安利一款接口文檔生成器——JApiDocs。

          Swagger想必大家都用過吧,非常方便,功能也十分強(qiáng)大。如果非要說Swaager有什么缺點(diǎn),想必就是注解寫起來比較麻煩。如果我說有一款不用寫注解,就可以生成文檔的工具,你心動(dòng)了嗎?他就是我們今天的主角——JApiDocs。

          下面我們一起來看看如何使用!

          一、添加依賴

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

          二、配置生成參數(shù)

          我們新建一個(gè)項(xiàng)目,然后隨便寫一個(gè)main方法,增加生成文檔的配置,然后運(yùn)行main方法。

          DocsConfig?config?=?new?DocsConfig();
          config.setProjectPath("F:\\Java旅途\\japi-docs");?//?項(xiàng)目根目錄
          config.setProjectName("japi-docs");?//?項(xiàng)目名稱
          config.setApiVersion("V1.0");???????//?聲明該API的版本
          config.setDocsPath("F:\\test");?//?生成API?文檔所在目錄
          config.setAutoGenerate(Boolean.TRUE);??//?配置自動(dòng)生成
          Docs.buildHtmlDocs(config);?//?執(zhí)行生成文檔

          三、編碼規(guī)范

          由于JApiDocs是通過解析Java源碼來實(shí)現(xiàn)的,因此如果要想實(shí)現(xiàn)想要的文檔,還是需要遵循一定的規(guī)范。

          3.1 類注釋、方法注釋和屬性注釋

          如果我們想生成類的注釋,我們可以直接在類上加注釋,也可以通過加@description來生成。

          /**
          ?*?用戶接口類
          ?*/

          @RequestMapping("/api/user")
          @RestController
          public?class?UserController?{}

          /**
          ?*?@author?Java旅途
          ?*?@Description?用戶接口類
          ?*?@Date?2020-06-15?21:46
          ?*/

          @RequestMapping("/api/user")
          @RestController
          public?class?UserController?{}

          如果我們想生成方法的注釋,只能直接加注釋,不能通過加@description來生成。

          /**
          ?*?查詢用戶
          ?*?@param?age?年齡
          ?*?@return?R
          */

          @GetMapping("/list")
          public?R?list(@RequestParam?int?age){

          ????User?user?=?new?User("Java旅途",?18);
          ????return?R.ok(user);
          }

          JApiDocs可以自動(dòng)生成實(shí)體類,關(guān)于實(shí)體類屬性的注釋有三種方式,生成的效果都是一樣的,如下:

          /**
          ?*?用戶名稱
          ?*/

          private?String?name;
          /**
          ?*?用戶年齡
          ?*/

          private?int?age;
          //?用戶名稱
          private?String?name;
          //?用戶年齡
          private?int?age;
          private?String?name;//?用戶名稱
          private?int?age;//?用戶年齡

          他除了支持咱們常用的model外,還支持IOS的model生成效果如下:

          3.2 請(qǐng)求參數(shù)

          如果提交的表單是 application/x-www-form-urlencoded 類型的key/value格式,則我們通過@param注解來獲取參數(shù),在參數(shù)后面添加注釋,示例如下:

          /**
          ??*?@param?age?年齡
          ??*/

          @GetMapping("/list")
          public?R?list(@RequestParam?int?age){
          ????User?user?=?new?User("Java旅途",?18);
          ????return?R.ok(user);
          }

          生成的文檔效果如下:

          請(qǐng)求參數(shù)

          參數(shù)名類型必須描述
          ageint年齡

          如果提交的表單是 application/json 類型的json數(shù)據(jù)格式,如下:

          /**
          ??*?@param?user
          ??*?@return
          ??*/

          @PostMapping("/add")
          public?R?add(@RequestBody?User?user){
          ????return?R.ok(user);
          }

          生成的文檔效果如下:

          請(qǐng)求參數(shù)

          {
          ??"name":?"string?//用戶名稱",
          ??"age":?"int?//用戶年齡"
          }

          3.3 響應(yīng)結(jié)果

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

          因此我們不需要再寫注釋,它會(huì)根據(jù)我們的返回結(jié)果進(jìn)行解析,效果如下:

          返回結(jié)果:

          {
          ??"code":?"int",
          ??"msg":?"string",
          ??"data":?{
          ????"name":?"string?//用戶名稱",
          ????"age":?"int?//用戶年齡"
          ??}
          }

          最終,我們生成的接口文檔,如下:

          四、高級(jí)配置

          4.1 @ApiDoc

          如果你不希望把所有的接口都導(dǎo)出,我們可以在配置中設(shè)置config.setAutoGenerate(Boolean.FALSE);然后在想要生成的接口上添加@ApiDoc。

          @ApiDoc有以下三個(gè)屬性:

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

          4.2 @Ignore

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

          public?class?User?{
          ????@Ignore
          ????private?int?age;
          }

          五、總結(jié)

          JApiDocs就介紹到這里了,優(yōu)勢(shì)劣勢(shì)大家很容易就看出來了。幾乎不需要注釋即可生成接口文檔,僅有的幾個(gè)注釋我們也可以通過ide來自動(dòng)生成。但是JApiDocs不具備Swagger在線調(diào)試功能。如果有一天JApiDocs支持在線調(diào)試后,那時(shí)候肯定會(huì)有一大波追隨者,畢竟寫代碼的誰喜歡寫多余的注解!

          更多精彩:

          記一次由Redis分布式鎖造成的重大事故,避免以后踩坑!

          6 個(gè) Spring Boot 項(xiàng)目夠經(jīng)典,建議收藏!

          數(shù)據(jù)量很大,分頁查詢很慢,推薦個(gè)優(yōu)化方案!

          京東把 Elasticsearch 用得真牛逼!日均5億訂單查詢完美解決!

          推薦一款免費(fèi)開源的通用數(shù)據(jù)庫工具

          這么設(shè)計(jì),Redis 10億數(shù)據(jù)量只需要100MB內(nèi)存

          關(guān)注公眾號(hào),查看更多優(yōu)質(zhì)文章


          最近面試BAT,整理一份面試資料Java面試BAT通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù)?666?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          明天見(??ω??)??

          瀏覽 54
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  午夜一区二区三区 | 一个色导航五月天伊人网站 | 国产精品久久久久久 | 逼逼爱插插网站 | 黄色片A视频 |