Swagger2Markup 生成PDF、HTML格式的API文档方法整理(中文支持)

本文默认文档处理目录为 /src/doc , 可以根据自己喜好自行配置

一、 生成流程

  1. 由 swagger.json 生成 Asciidoc 文档 (swagger2Markup)
  2. 由 Asciidoc 文档生成PDF格式的文档 (asciidoctor-maven-plugin)

二、生成 Asciidoc

swagger.json 获取路径如下图:
在这里插入图片描述
可以以API 和插件两种方式,将swagger.json 转换为asciidoc文档

2.1 Swagger2Markup Api 生成

需要添加依赖:

<dependency>
    <groupId>io.github.swagger2markup</groupId>
    <artifactId>swagger2markup</artifactId>
    <version>1.3.3</version>
</dependency>

package com.example

import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;

import io.github.swagger2markup.GroupBy;
import io.github.swagger2markup.Language;
import io.github.swagger2markup.builder.Swagger2MarkupConfigBuilder;
import io.github.swagger2markup.Swagger2MarkupConfig;
import io.github.swagger2markup.Swagger2MarkupConverter;
import io.github.swagger2markup.markup.builder.MarkupLanguage;

public class AsciidocConverter {

    public static void main(String... args) throws MalformedURLException {
        // 用于转换的swagger.json可以来自于本地文件,也可以来http 获取
        // Path localSwaggerFile = Paths.get("/path/to/swagger.json");
        URL remoteSwaggerFile = new URL("http://60.60.60.74:18041/v2/api-docs");

// asciidoc 输出文件夹
        Path outputDir = Paths.get("./src/doc/asciidoc/generated");

        // 转换配置设置
        // 配置书写方式有多种,可参考 Swagger2MarkupConfigBuilder 构造函数
        // 此处可配置输出格式为 markdown 文档
        Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
                .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
                .withOutputLanguage(Language.ZH)
                .withPathsGroupedBy(GroupBy.TAGS)
                .build();

        Swagger2MarkupConverter.from(remoteSwaggerFile)
                .withConfig(config)
                .build()
                .toFolder(outputDir);
    }

}

常用属性配置表,完整属性参考:官方文档

项目Value允许值默认值
swagger2markup.markupLanguage生成文件类型ASCIIDOC, MARKDOWN, CONFLUENCE_MARKUPASCIIDOC
swagger2markup.swaggerMarkupLanguageswagger 描述所用语言ASCIIDOC, MARKDOWN, CONFLUENCE_MARKUPMARKDOWN
swagger2markup.pathsGroupedByAPI 分组方法AS_IS, TAGS, REGEXAS_IS
swagger2markup.outputLanguage标签语言EN, DE, FR, RUEN
swagger2markup.lineSeparatorline separator which should be usedUNIX, WINDOWS, MACSystem-dependent
swagger2markup.generatedExamplesEnabled是否生成exampletrue, falsefalse
swagger2markup.flatBodyEnabled是否区分body 参数和其他参数true, falsefalse
swagger2markup.pathSecuritySectionEnabled是否禁用路径的安全部分true ,falsetrue
swagger2markup.basePathPrefixEnabled是否给所有路径添加前缀true , falsefalse
2.2 swagger2markup 插件生成 asciidoc

pom.xml 添加插件

<plugin>
    <groupId>io.github.swagger2markup</groupId>
    <artifactId>swagger2markup-maven-plugin</artifactId>
    <version>1.3.3</version>
    <dependencies>
        <dependency>
            <groupId>io.github.swagger2markup</groupId>
            <artifactId>swagger2markup</artifactId>
            <version>1.3.3</version>
        </dependency>
    </dependencies>
    <configuration>
        <!--本地 swagger.json 路径 或 远程访问地址-->
        <swaggerInput>http://60.60.60.74:18041/v2/api-docs</swaggerInput>
        <!-- 输出目录 -->
        <outputDir>./src/doc/asciidoc/generated</outputDir>
        <config>
            <!--设置输出文件的语言:ASCIIDOC, MARKDOWN, CONFLUENCE_MARKUP-->
            <swagger2markup.markupLanguage>ASCIIDOC</swagger2markup.markupLanguage>
            <!--设置目录的展现方式-->
            <swagger2markup.pathsGroupedBy>TAGS</swagger2markup.pathsGroupedBy>
        </config>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>convertSwagger2markup</goal>
            </goals>
        </execution>
    </executions>
</plugin>

插件配置相关参数,参考上一小节属性表格

2.3 输出结果

在这里插入图片描述

三、ASCIIDOC => PDF、HTML

采用 asciidoctor-maven-plugin插件的方式来转化Ascii文档。

3.1 添加中文主题和字体文件夹

下载字体(RobotoMono 开头和 KaiGenGothicCN 开头的字体文件)和theme文件(Source code (zip))。

字体下载链接:https://github.com/chloerei/asciidoctor-pdf-cjk-kai_gen_gothic/releases

然后在项目的文档目录下创建fonts和themes两个目录,把下载的8个字体文件复制到fonts目录下,解压asciidoctor-pdf-cjk-kai_gen_gothic-0.1.0-fonts.zip文件,把data\themes\下的cn-theme.yml复制到themes目录下
在这里插入图片描述

3.2 手写index.adoc

在这里插入图片描述
此文件主要用于指引插件访问asciidoc文档。

3.3 配置插件
<plugin>
    <groupId>org.asciidoctor</groupId>
    <artifactId>asciidoctor-maven-plugin</artifactId>
    <version>1.5.3</version>

    <!-- Include Asciidoctor PDF for pdf generation -->
    <dependencies>
        <dependency>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctorj-pdf</artifactId>
            <version>1.5.0-alpha.11</version>
        </dependency>
        <!-- Comment this section to use the default jruby artifact provided by the plugin -->
        <dependency>
            <groupId>org.jruby</groupId>
            <artifactId>jruby-complete</artifactId>
            <version>9.1.8.0</version>
        </dependency>
        <!-- Comment this section to use the default AsciidoctorJ artifact provided by the plugin -->
        <dependency>
            <groupId>org.asciidoctor</groupId>
            <artifactId>asciidoctorj</artifactId>
            <version>1.5.4</version>
        </dependency>
    </dependencies>

    <!-- Configure generic document generation settings -->
    <configuration>
        <!--默认指向 ${basedir}/src/main/asciidoc-->
        <sourceDirectory>./src/doc/</sourceDirectory>
        <!--an override to process a single source file; 默认指向 ${sourceDirectory} 中的所有文件-->
        <sourceDocumentName>index.adoc</sourceDocumentName>
        <attributes>
            <doctype>book</doctype>
            <toc>left</toc>
            <toclevels>3</toclevels>
            <numbered></numbered>
            <hardbreaks></hardbreaks>
            <sectlinks></sectlinks>
            <sectanchors></sectanchors>
        </attributes>
    </configuration>
    <!-- Since each execution can only handle one backend, run
         separate executions for each desired output type -->
    <executions>
        <execution>
            <id>output-html</id>
            <phase>package</phase>
            <goals>
                <goal>process-asciidoc</goal>
            </goals>
            <configuration>
                <backend>html5</backend>
                <outputDirectory>./src/doc/asciidoc/html</outputDirectory>
                <sourceHighlighter>coderay</sourceHighlighter>
            </configuration>
        </execution>
        <execution>
            <id>output-pdf</id>
            <phase>package</phase>
            <goals>
                <goal>process-asciidoc</goal>
            </goals>
            <configuration>
                <backend>pdf</backend>
                <outputDirectory>./src/doc/asciidoc/pdf</outputDirectory>
                <sourceHighlighter>coderay</sourceHighlighter>
                <doctype>book</doctype>
                <attributes>
                    <toc>left</toc>
                    <toclevels>3</toclevels>
                    <numbered></numbered>
                    <hardbreaks></hardbreaks>
                    <sectlinks></sectlinks>
                    <sectanchors></sectanchors>
                    <pdf-fontsdir>./fonts</pdf-fontsdir>
                    <pdf-stylesdir>./themes</pdf-stylesdir>
                    <pdf-style>cn</pdf-style>
                </attributes>
            </configuration>
        </execution>
    </executions>
</plugin>

四、备注

  • 代码示例中的各处访问路径均为本人项目配置路径,可自行配置。
  • 可自行设置文档生成的时间,修改此处即可:<phase>package</phase>

五、参考

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Swagger 是一个用于构建、文档化和使用 RESTful Web 服务的开源工具。Swagger 有很多版本,其中 Swagger2 是其中最常用的一个版本。Swagger2 可以通过注解的方式生成 API 接口文档,这些注解包括 @Api、@ApiOperation、@ApiParam 等。 下面是使用 Swagger2 生成 API 接口文档的步骤: 1. 添加 Swagger2 依赖 在项目的 pom.xml 文件中添加 Swagger2 的依赖: ``` <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> ``` 2. 配置 Swagger2 在 Spring Boot 应用的启动类上添加 @EnableSwagger2 注解开启 Swagger2 支持,并配置 Docket 对象: ``` @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); } } ``` 这个配置会扫描所有的 Controller 类,并生成 API 接口文档。 3. 添加 Swagger2 注解 在 Controller 类的方法上添加 Swagger2 注解,包括: - @Api:用于标识这个 Controller 类的作用和说明。 - @ApiOperation:用于标识这个方法的作用和说明。 - @ApiParam:用于标识方法参数的作用和说明。 示例代码: ``` @RestController @RequestMapping("/api") @Api(value = "HelloWorldController", description = "示例控制器") public class HelloWorldController { @GetMapping("/hello") @ApiOperation(value = "打招呼", notes = "向用户打招呼") public String hello(@ApiParam(name = "name", value = "用户名", required = true) @RequestParam String name) { return "Hello, " + name + "!"; } } ``` 4. 访问 Swagger UI 启动应用后,访问 http://localhost:8080/swagger-ui.html 可以看到 Swagger UI 界面,其中包含了生成API 接口文档。在这个界面中,可以查看 API 接口的详细信息、测试 API 接口等。 以上就是使用 Swagger2 生成 API 接口文档的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值