SpringBoot 教程 & 笔记 |Demo07- 整合 Swagger2 API 离线文档

本贴最后更新于 2376 天前,其中的信息可能已经时移世异

本文主要讲解如何在springboot下整合Swagger2 API离线文档。

本教程在Demo07基础上添加Swagger2 API离线文档配置信息

添加依赖

引入 springfox-staticdocsspring-restdocs-mockmvc 依赖:

<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-staticdocs</artifactId> <version>2.6.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.restdocs</groupId> <artifactId>spring-restdocs-mockmvc</artifactId> <version>2.0.2.RELEASE</version> <scope>test</scope> </dependency>

添加依赖

MAVEN 属性配置

<swagger2markup.version>1.3.1</swagger2markup.version> <swagger.output.dir>${project.build.directory}/asciidoc/json</swagger.output.dir> <swagger.snippetOutput.dir>${project.build.directory}/asciidoc/snippets</swagger.snippetOutput.dir> <generated.asciidoc.directory>${project.build.directory}/asciidoc/generated</generated.asciidoc.directory> <asciidoctor.html.output.directory>${project.build.directory}/asciidoc/html</asciidoctor.html.output.directory> <swagger.input>${swagger.output.dir}/swagger.json</swagger.input>

MAVEN 属性配置

添加插件配置

<!-- 以下用于生成adoc文件的配置 --> <plugin> <groupId>io.github.swagger2markup</groupId> <artifactId>swagger2markup-maven-plugin</artifactId> <version>${swagger2markup.version}</version> <dependencies> <dependency> <groupId>io.github.swagger2markup</groupId> <artifactId>swagger2markup-import-files-ext</artifactId> <version>${swagger2markup.version}</version> </dependency> <dependency> <groupId>io.github.swagger2markup</groupId> <artifactId>swagger2markup-spring-restdocs-ext</artifactId> <version>${swagger2markup.version}</version> </dependency> </dependencies> <configuration> <swaggerInput>${swagger.input}</swaggerInput> <outputDir>${generated.asciidoc.directory}</outputDir> <config> <swagger2markup.markupLanguage>ASCIIDOC</swagger2markup.markupLanguage> <swagger2markup.pathsGroupedBy>TAGS</swagger2markup.pathsGroupedBy> <swagger2markup.extensions.springRestDocs.snippetBaseUri>${swagger.snippetOutput.dir} </swagger2markup.extensions.springRestDocs.snippetBaseUri> <swagger2markup.extensions.springRestDocs.defaultSnippets>true </swagger2markup.extensions.springRestDocs.defaultSnippets> </config> </configuration> <executions> <execution> <phase>test</phase> <goals> <goal>convertSwagger2markup</goal> </goals> </execution> </executions> </plugin> <!--此插件生成HTML--> <plugin> <groupId>org.asciidoctor</groupId> <artifactId>asciidoctor-maven-plugin</artifactId> <version>1.5.6</version> <configuration> <sourceDirectory>${generated.asciidoc.directory}</sourceDirectory> <outputDirectory>${asciidoctor.html.output.directory}</outputDirectory> <headerFooter>true</headerFooter> <doctype>book</doctype> <backend>html</backend> <sourceHighlighter>coderay</sourceHighlighter> <attributes> <!--菜单栏在左边--> <toc>left</toc> <!--多标题排列--> <toclevels>3</toclevels> <!--自动打数字序号--> <sectnums>true</sectnums> </attributes> </configuration> <executions> <execution> <phase>test</phase> <goals> <goal>process-asciidoc</goal> </goals> </execution> </executions> </plugin>

添加插件配置

编写测试类

com/heardfate/springboot/demo/Swagger2MarkupTest.java 下添加测试类

package com.heardfate.springboot.demo; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import java.nio.file.Files; import java.nio.file.Paths; import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * @since: 2018/11/4 * @author: Mr.HeardFate */ @RunWith(SpringRunner.class) @SpringBootTest public class Swagger2MarkupTest { @Autowired private WebApplicationContext context; private MockMvc mockMvc; @Before public void setUp() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context).build(); } @Test public void createSpringfoxSwaggerJson() throws Exception { String outputDir = "target/asciidoc/json"; //将api-docs的json数据写入文件 MvcResult mvcResult = this.mockMvc.perform(get("/v2/api-docs") .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andReturn(); //将获取的JSON写入文件 MockHttpServletResponse response = mvcResult.getResponse(); String swaggerJson = response.getContentAsString(); Files.createDirectories(Paths.get(outputDir)); Files.write(Paths.get(outputDir, "swagger.json"), swaggerJson.getBytes()); //将多个ADOC整合成一个INDEX.ADOC文件 String generated = "target/asciidoc/generated"; Files.createDirectories(Paths.get(generated)); Files.write(Paths.get(generated, "index.adoc"), ("include::overview.adoc[]\ninclude::definitions" + ".adoc[]\ninclude::paths.adoc[]").getBytes()); } }

编写测试类

运行测试

通过 Idea 的 Maven 窗口运行 test 命令,生成离线 HTML 文档
运行测试

离线 API 文档

离线 API 文档
离线 API 文档
离线 API 文档

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    948 引用 • 1460 回帖 • 1 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • Pleuvoir

    图挂了

  • someone

    博客挂家庭网络的,没有挂到服务器上,IP 会变动,一下载东西 IP 就疯狂变动!目前应该是好的