Spring Boot集成smart-doc生成api文檔

smart-doc是一個java restful api文檔生成工具,smart-doc顛覆了傳統相似swagger這種大量採用註解侵入來生成文檔的實現方法。smart-doc徹底基於接口源碼分析來生成接口文檔,徹底作到零註解侵入,你只須要按照java標準註釋的寫,smart-doc就能幫你生成一個簡易明瞭的markdown或是一個像GitBook樣式的靜態html文檔。
下面將介紹如何在Spring Boot項目中集成smart-doc生成一個簡明的api文檔。html

注意: smart-doc已經被開源中國收錄,而且開始被國內不少開發者使用到本身項目中快速生成接口文檔。java

smart-doc功能

  • 零註解、零學習成本、只須要寫標準java註釋。
  • 基於源代碼接口定義自動推導,強大的返回結構推導。
  • 支持Spring MVC,Spring Boot,Spring Boot Web Flux(controller書寫方式)。
  • 支持Callable,Future,CompletableFuture等異步接口返回的推導。
  • 支持JavaBean上的JSR303參數校驗規範。
  • 對json請求參數的接口可以自動生成模擬json參數。
  • 對一些經常使用字段定義可以生成有效的模擬值。
  • 支持生成json返回值示例。
  • 支持從項目外部加載源代碼來生成字段註釋(包括標準規範發佈的jar包)。
  • 支持生成多種格式文檔:Markdown、HTML五、Asciidoctor。
  • 輕易實如今Spring Boot服務上在線查看靜態HTML5 api文檔。
  • 開放文檔數據,可自由實現接入文檔管理系統。

在Spring Boot項目中集成Smart-doc

添加smart-doc依賴,注意打包後不須要將smart-doc打入最終的產品包,所以我推薦只用test級別就能夠了。git

<dependency>
    <groupId>com.github.shalousun</groupId>
    <artifactId>smart-doc</artifactId>
    <version>1.7.0</version>
    <scope>test</scope>
</dependency>

新建一個對象:github

public class User {

    /**
     * 用戶名
     */
    private String userName;

    /**
     * 暱稱
     */
    private String nickName;

    /**
     * 用戶地址
     */
    private String userAddress;

    /**
     * 用戶年齡
     */
    private int userAge;

    /**
     * 手機號
     */
    private String phone;

    /**
     * 建立時間
     */
    private Long createTime;

    /**
     * ipv6
     */
    private String ipv6;

    /**
     * 固定電話
     */
    private String telephone;
    //省略get set
}

下面來新建一個UserController,而後將User做爲Controller的請求參數和響應實體測試下smart-doc是如何輕鬆完成文檔生成的。json

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

    /**
     * 添加用戶
     * @param user
     * @return
     */
    @PostMapping("/add")
    public User addUser(@RequestBody User user){
        return null;
    }
}

添加完成controller後,咱們在項目中新建一個單元測試類用於跑文檔。api

public class ApiDocTest {

    /**
     * 包括設置請求頭,缺失註釋的字段批量在文檔生成期使用定義好的註釋
     */
    @Test
    public void testBuilderControllersApi() {
        ApiConfig config = new ApiConfig();
        config.setServerUrl("http://localhost:8080");
        //true會嚴格要求註釋,推薦設置true
        config.setStrict(true);
        //true會將文檔合併導出到一個markdown
        //config.setAllInOne(true);
        //生成html時加密文檔名不暴露controller的名稱
        config.setMd5EncryptedHtmlName(true);

        //指定文檔輸出路徑
        //@since 1.7 版本開始,選擇生成靜態html doc文檔可以使用該路徑:DocGlobalConstants.HTML_DOC_OUT_PATH;
        config.setOutPath("d:\\md");
        // @since 1.2,若是不配置該選項,則默認匹配所有的controller,
        // 若是須要配置有多個controller可使用逗號隔開
        config.setPackageFilters("com.power.doc.controller");


        long start = System.currentTimeMillis();
        //獲取接口數據後自行處理
        ApiDocBuilder.builderControllersApi(config);
        long end = System.currentTimeMillis();
        DateTimeUtil.printRunTime(end, start);
    }
}

最後運行一下單元測試smart-doc便可生成markdown接口文檔到指定的目錄。效果以下:restful

用戶信息操做接口

添加用戶

URL: http://localhost:8080/user/addmarkdown

Type: POSTapp

Content-Type: application/json; charset=utf-8異步

Request-parameters:

Parameter Type Description Required Since
userName string 用戶名 false -
nickName string 暱稱 false -
userAddress string 用戶地址 false -
userAge int 用戶年齡 false -
phone string 手機號 false -
createTime number 建立時間 false -
ipv6 string ipv6 false -
telephone string 固定電話 false -

Request-example:

{
    "userName":"鵬飛.賀",
    "nickName":"raymond.gutkowski",
    "userAddress":"Apt. 819 蕭旁7699號, 章丘, 滇 852063",
    "userAge":41,
    "phone":"15018373016",
    "createTime":1569934393095,
    "ipv6":"9eb3:fada:ffd2:912e:6225:1062:a2d7:718f",
    "telephone":"15018373016"
}

Response-fields:

Field Type Description Since
userName string 用戶名 -
nickName string 暱稱 -
userAddress string 用戶地址 -
userAge int 用戶年齡 -
phone string 手機號 -
createTime number 建立時間 -
ipv6 string ipv6 -
telephone string 固定電話 -

Response-example:

{
    "userName":"鵬飛.賀",
    "nickName":"raymond.gutkowski",
    "userAddress":"Apt. 819 蕭旁7699號, 章丘, 滇 852063",
    "userAge":41,
    "phone":"15018373016",
    "createTime":1569934393095,
    "ipv6":"9eb3:fada:ffd2:912e:6225:1062:a2d7:718f",
    "telephone":"15018373016"
}

是否是比swagger簡單不少呢,並且還徹底不侵入代碼,只須要寫上標準的java doc註釋。須要瞭解更多多狀況請查看smart-doc項目,好用請記得點star哦。查看smart-doc項目

注意: 本文來自smart-doc原做者,您能夠轉載但請勿copy充當原創。

相關文章
相關標籤/搜索