spring+swagger2生成在线文档,以及离线pdf文档

maven依赖

<!-- swagger2 start -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- swagger2 end -->

        <!-- swagger2markup 生成静态文件 start-->
        <dependency>
            <groupId>io.github.swagger2markup</groupId>
            <artifactId>swagger2markup</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!-- swagger2markup 生成静态文件 end -->
    </dependencies>

swagger2配置文件

package com.jincheng.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @author: jinCheng
 * @description: swagger2配置
 */
@Configuration
@EnableSwagger2
public class Swagger2Config {

    @Value("${swagger.enable:true}")
    private boolean enableSwagger;

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .enable(enableSwagger)
                .apiInfo(apiInfo())
                .select()
                // 此处换成自己项目的扫描包
                .apis(RequestHandlerSelectors.basePackage("com.jincheng"))
//                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("示例 APIs")
                .version("1.0")
                .build();
    }
}

java代码生成asciidoc文件

package com.jincheng;

import io.github.swagger2markup.GroupBy;
import io.github.swagger2markup.Language;
import io.github.swagger2markup.Swagger2MarkupConfig;
import io.github.swagger2markup.Swagger2MarkupConverter;
import io.github.swagger2markup.builder.Swagger2MarkupConfigBuilder;
import io.github.swagger2markup.markup.builder.MarkupLanguage;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

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

/**
 * @author: jinCheng
 * @description: java代码生成文档
 */
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class Swagger2Tests {

    /**
     * 获取项目在线swagger的json数据,8099,修改为自己项目设置的
     */
    private String swagger_source_url = "http://localhost:8099/v2/api-docs";

    /**
     * 生成的asciidoc文件的存放目录
     */
    private String asciidoc_dir = "src/main/resources/docs/asciidoc/generated";

    private String fileName = "all";

    /**
     * 生成AsciiDocs格式文档
     *
     * @throws MalformedURLException
     */
    @Test
    public void generateAsciiDoc() throws MalformedURLException {
        // MarkupLanguage三种格式:ASCIIDOC,MARKDOWN,CONFLUENCE_MARKUP
        Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
                .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
                .build();

        Swagger2MarkupConverter.from(new URL(swagger_source_url))
                .withConfig(config)
                .build()
                .toFolder(Paths.get(asciidoc_dir));
    }

    /**
     * 生成AsciiDocs格式文档,并汇总成一个文件
     *
     * @throws Exception
     */
    @Test
    public void generateAsciiDocsToFile() throws Exception {
        Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()
                .withMarkupLanguage(MarkupLanguage.ASCIIDOC)
                .withOutputLanguage(Language.ZH)
                .withPathsGroupedBy(GroupBy.TAGS)
                .withGeneratedExamples()
                .withoutInlineSchema()
                .build();

        Swagger2MarkupConverter.from(new URL(swagger_source_url))
                .withConfig(config)
                .build()
                .toFile(Paths.get(asciidoc_dir + "/" + fileName));
    }
}

maven插件生成asciidoc

路径配置

    <properties>
        <java.version>1.8</java.version>
        <!-- 获取项目在线swagger的json数据,端口号8099,修改为自己项目设置的 -->
        <swagger_source_url>http://localhost:8099/v2/api-docs</swagger_source_url>
        <!-- 生成的asciidoc文件的存放目录 -->
        <asciidoc_output_directory>src/main/resources/docs/asciidoc/generated</asciidoc_output_directory>
        <!-- 生成的html文件的存放目录 -->
        <html_output_directory>src/main/resources/docs/html/generated</html_output_directory>
        <!-- 生成的pdf文件的存放目录 -->
        <pdf_output_directory>src/main/resources/docs/pdf/generated</pdf_output_directory>
    </properties>

maven插件

 <!-- 生成ASCIIDOC,且均为单个文件 (除了ASCIIDOC之外,还有MARKDOWN和CONFLUENCE_MARKUP可选)  -->
            <!-- 此插件使用时,需启动项目 控制台:swagger2markup:convertSwagger2markup  -->
            <plugin>
                <groupId>io.github.swagger2markup</groupId>
                <artifactId>swagger2markup-maven-plugin</artifactId>
                <version>1.3.1</version>
                <configuration>
                    <swaggerInput>${swagger_source_url}</swaggerInput>
                    <outputDir>${asciidoc_output_directory}</outputDir>
                    <config>
                        <swagger2markup.markupLanguage>ASCIIDOC</swagger2markup.markupLanguage>
                    </config>
                </configuration>
            </plugin>

maven插件生成离线pdf文档

插件信息

<!-- 此插件生成HTML和PDF 读取已有的asciidoc文件,并转换为HTML和PDF-->
            <!-- mvn asciidoctor:process-asciidoc  mvn generate-resources -->
            <plugin>
                <groupId>org.asciidoctor</groupId>
                <artifactId>asciidoctor-maven-plugin</artifactId>
                <version>1.5.6</version>

                <!-- 生成pdf需要使用的依赖  -->
                <dependencies>
                    <dependency>
                        <groupId>org.asciidoctor</groupId>
                        <artifactId>asciidoctorj-pdf</artifactId>
                        <!-- 注意此版本 -->
                        <version>1.5.0-alpha-zh.16</version>
                    </dependency>
                    <dependency>
                        <groupId>org.jruby</groupId>
                        <artifactId>jruby-complete</artifactId>
                        <version>1.7.21</version>
                    </dependency>
                </dependencies>

                <configuration>
                    <!-- 源文件地址 asciidoc 存放的位置-->
                    <sourceDirectory>${asciidoc_output_directory}</sourceDirectory>
                    <sourceHighlighter>coderay</sourceHighlighter>
                    <attributes>
                        <!--菜单栏在左边-->
                        <toc>left</toc>
                        <!--多标题排列-->
                        <toclevels>3</toclevels>
                        <!--自动生成数字序号-->
                        <sectnums>true</sectnums>
                    </attributes>
                </configuration>

                <executions>
                    <execution>
                        <id>output-html</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>process-asciidoc</goal>
                        </goals>
                        <configuration>
                            <backend>html5</backend>
                            <!-- 生成的html存放位置 -->
                            <outputDirectory>${html_output_directory}</outputDirectory>
                        </configuration>
                    </execution>

                    <execution>
                        <id>output-pdf</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>process-asciidoc</goal>
                        </goals>
                        <configuration>
                            <backend>pdf</backend>
                            <!-- 生成的pdf存放位置 -->
                            <outputDirectory>${pdf_output_directory}</outputDirectory>
                            <!-- 解决pdf中文缺字问题 -->
                            <attributes>
                                <pdf-style>cn</pdf-style>
                            </attributes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

生成pdf中文缺字问题

下载jar

https://gitee.com/jincheng-921/asciidoctorj-pdf-jar.git

上传到maven本地仓库,私服

https://blog.csdn.net/jincheng_921/article/details/89504440

项目源码

https://gitee.com/jincheng-921/spring_swagger2_demo.git
项目启动后查看在线文档 http://localhost:8099/swagger-ui.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章