• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • SpringBoot非官方教程 | 第十篇: 用spring Restdocs創建API文檔

    這篇文章將帶你了解如何用spring官方推薦的restdoc去生成api文檔。本文創建一個簡單的springboot工程,將http接口通過Api文檔暴露出來。只需要通過 JUnit單元測試和Spring的MockMVC就可以生成文檔。

    準備工作

    • 你需要15min
    • Jdk 1.8
    • maven 3.0+
    • idea

    創建工程

    引入依賴,其pom文件:

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.restdocs</groupId>
                <artifactId>spring-restdocs-mockmvc</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>

    通過@SpringBootApplication,開啟springboot

    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }

    在springboot通常創建一個controller:

    @RestController
    public class HomeController {
    
        @GetMapping("/")
        public Map<String, Object> greeting() {
            return Collections.singletonMap("message", "Hello World");
        }
    
    }

    啟動工程,訪問localhost:8080,瀏覽器顯示:

    {“message”:”Hello World”}

    證明接口已經寫好了,但是如何通過restdoc生存api文檔呢

    Restdoc,通過單元測試生成api文檔

    restdocs是通過單元測試生存snippets文件,然后snippets根據插件生成htm文檔的。

    建一個單元測試類:

    @RunWith(SpringRunner.class)
    @WebMvcTest(HomeController.class)
    @AutoConfigureRestDocs(outputDir = "target/snippets")
    public class WebLayerTest {
    
        @Autowired
        private MockMvc mockMvc;
    
        @Test
        public void shouldReturnDefaultMessage() throws Exception {
            this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
                    .andExpect(content().string(containsString("Hello World")))
                    .andDo(document("home"));
        }
    }

    其中,@ AutoConfigureRestDocs注解開啟了生成snippets文件,并指定了存放位置。

    啟動單元測試,測試通過,你會發現在target文件下生成了一個snippets文件夾,其目錄結構如下:

    └── target
        └── snippets
            └── home
                └── httpie-request.adoc
                └── curl-request.adoc
                └── http-request.adoc
                └── http-response.adoc

    默認情況下,snippets是Asciidoctor格式的文件,包括request和reponse,另外其他兩種httpie和curl兩種流行的命令行的http請求模式。

    到目前為止,只生成了Snippets文件,需要用Snippets文件生成文檔。

    怎么用Snippets

    創建一個新文件src/main/asciidoc/index.adoc :

    = 用 Spring REST Docs 構建文檔
    
    This is an example output for a service running at http://localhost:8080:
    
    .request
    include::{snippets}/home/http-request.adoc[]
    
    .response
    include::{snippets}/home/http-response.adoc[]
    
    這個例子非常簡單,通過單元測試和一些簡單的配置就能夠得到api文檔了。

    adoc的書寫格式,參考:http://docs.spring.io/spring-restdocs/docs/current/reference/html5/,這里不多講解。

    需要使用asciidoctor-maven-plugin插件,在其pom文件加上:

    <plugin>
        <groupId>org.asciidoctor</groupId>
        <artifactId>asciidoctor-maven-plugin</artifactId>
        <executions>
            <execution>
                <id>generate-docs</id>
                <phase>prepare-package</phase>
                <goals>
                    <goal>process-asciidoc</goal>
                </goals>
                <configuration>
                    <sourceDocumentName>index.adoc</sourceDocumentName>
                    <backend>html</backend>
                    <attributes>
                        <snippets>${project.build.directory}/snippets</snippets>
                    </attributes>
                </configuration>
            </execution>
        </executions>
    </plugin>

    這時只需要通過mvnw package命令就可以生成文檔了。 
    在/target/generated-docs下有個index.html,打開這個html,顯示如下,界面還算簡潔:

    Paste_Image.png

    結語

    通過單元測試,生存adoc文件,再用adoc文件生存html,只需要簡單的幾步就可以生成一個api文檔的html文件,這個html文件你可以通網站發布出去。整個過程很簡單,對代碼無任何影響。

    版權聲明:本文為qq_39335514原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_39335514/article/details/79087187

    智能推薦

    SpringBoot非官方教程 | 第十二篇:springboot集成apidoc

    轉載請標明出處: 原文首發于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-apidoc/ 本文出自方志朋的博客 首先聲明下,apidoc是基于注釋來生成文檔的,它不基于任何框架,而且支持大多數編程語言,為了springboot系列的完整性,所以標了個題。 一、apidoc簡介 apidoc通過在你代碼的注釋來生成api文...

    SpringBoot非官方教程 | 第十九篇: 驗證表單信息

    轉載請標明出處: http://blog.csdn.net/forezp/article/details/71023817 本文出自方志朋的博客 這篇文篇主要簡述如何在springboot中驗證表單信息。在springmvc工程中,需要檢查表單信息,表單信息驗證主要通過注解的形式。 構建工程 創建一個springboot工程,由于用到了 web 、thymeleaf、validator、el,引入...

    SpringBoot非官方教程 | 第十九篇: 驗證表單信息

    轉載請標明出處:  http://blog.csdn.net/forezp/article/details/71023817  本文出自方志朋的博客 這篇文篇主要簡述如何在springboot中驗證表單信息。在springmvc工程中,需要檢查表單信息,表單信息驗證主要通過注解的形式。 構建工程 創建一個springboot工程,由于用到了 web 、thymeleaf、val...

    SpringBoot非官方教程 | 第十九篇: 驗證表單信息

    轉載請標明出處: http://blog.csdn.net/forezp/article/details/71023817 本文出自方志朋的博客 這篇文篇主要簡述如何在springboot中驗證表單信息。在springmvc工程中,需要檢查表單信息,表單信息驗證主要通過注解的形式。 構建工程 創建一個springboot工程,由于用到了 web 、thymeleaf、validator、el,引入...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    猜你喜歡

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    精品国产乱码久久久久久蜜桃不卡