网上有不少《使用swagger2构建API文档》的文章,该文档是一个在线文档,须要使用HTTP访问。可是在咱们平常使用swagger接口文档的时候,有的时候须要接口文档离线访问,如将文档导出为html、markdown格式。又或者咱们不但愿应用系统与swagger接口文档使用同一个服务,而是导出HTML以后单独部署,这样作保证了对接口文档的访问不影响业务系统,也必定程度提升了接口文档的安全性。核心的实现过程就是:html
注意:adoc是一种文件格式,不是个人笔误。不是doc文件也不是docx文件。java
在已经集成了swagger2的应用内,经过maven坐标引入相关依赖类库,pom.xml代码以下:nginx
<dependency> <groupId>io.github.swagger2markup</groupId> <artifactId>swagger2markup</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-core</artifactId> <version>1.5.16</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> <version>1.5.16</version> </dependency>
swagger2markup用于将swagger2在线接口文档导出为html,markdown,adoc等格式文档,用于静态部署或离线阅读。其中第一个maven坐标是必须的。后两个maven坐标,当你在执行后面的代码过程当中报下图中的ERROR,或者有的类没法import的时候使用。git
产生异常的缘由已经有人在github的issues上给出解释了:当你使用swagger-core版本大于等于1.5.11,而且swagger-models版本小于1.5.11就会有异常发生。因此咱们显式的引入这两个jar,替换掉swagger2默认引入的这两个jar。github
下面的代码是经过编码方式实现的生成adoc格式文件的方式web
@RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) public class DemoApplicationTests { @Test public void generateAsciiDocs() throws Exception { // 输出Ascii格式 Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withMarkupLanguage(MarkupLanguage.ASCIIDOC) //设置生成格式 .withOutputLanguage(Language.ZH) //设置语言中文仍是其余语言 .withPathsGroupedBy(GroupBy.TAGS) .withGeneratedExamples() .withoutInlineSchema() .build(); Swagger2MarkupConverter.from(new URL("http://localhost:8888/v2/api-docs")) .withConfig(config) .build() .toFile(Paths.get("src/main/resources/docs/asciidoc")); } }
@Test public void generateMarkdownDocsToFile() throws Exception { // 输出Markdown到单文件 Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withMarkupLanguage(MarkupLanguage.MARKDOWN) .withOutputLanguage(Language.ZH) .withPathsGroupedBy(GroupBy.TAGS) .withGeneratedExamples() .withoutInlineSchema() .build(); Swagger2MarkupConverter.from(new URL("http://localhost:8888/v2/api-docs")) .withConfig(config) .build() .toFile(Paths.get("src/main/resources/docs/markdown")); }
上面的这一段代码是生成markdown格式接口文件的代码。执行上面的2段单元测试代码,就能够生产对应格式的接口文件。spring
还有一种方式是经过maven插件的方式,生成adoc和markdown格式的接口文件。笔者不常使用这种方式,没有使用代码生成的方式配置灵活,不少配置都放到pom.xml感受很臃肿。但仍是介绍一下,首先配置maven插件swagger2markup-maven-plugin。json
<plugin> <groupId>io.github.swagger2markup</groupId> <artifactId>swagger2markup-maven-plugin</artifactId> <version>1.3.1</version> <configuration> <swaggerInput>http://localhost:8888/v2/api-docs</swaggerInput><!---swagger-api-json路径--> <outputDir>src/main/resources/docs/asciidoc</outputDir><!---生成路径--> <config> <swagger2markup.markupLanguage>ASCIIDOC</swagger2markup.markupLanguage><!--生成格式--> </config> </configuration> </plugin>
而后运行插件就能够了,以下图:api
<plugin> <groupId>org.asciidoctor</groupId> <artifactId>asciidoctor-maven-plugin</artifactId> <version>1.5.6</version> <configuration> <!--asciidoc文件目录--> <sourceDirectory>src/main/resources/docs</sourceDirectory> <!---生成html的路径--> <outputDirectory>src/main/resources/html</outputDirectory> <backend>html</backend> <sourceHighlighter>coderay</sourceHighlighter> <attributes> <!--导航栏在左--> <toc>left</toc> <!--显示层级数--> <!--<toclevels>3</toclevels>--> <!--自动打数字序号--> <sectnums>true</sectnums> </attributes> </configuration> </plugin>
adoc的sourceDirectory路径必须和第三小节中生成的adoc文件路径一致。而后按照下图方式运行插件。安全
HTMl接口文档显示的效果以下,有了HTML接口文档你想转成其余各类格式的文档就太方便了,有不少工具可使用。这里就不一一介绍了。