Swagger离线文档输出
                    
                        Post on
                        
                    
    
        
            背景
默认集成在项目中的swagger需要在程序起动后才可以访问,但我们有一些场景需要给离线文档,所以需要把swagger接口以文档方式输出。
当前示例是以html文档输出文档。
配置
我们认为你在项目中已经引入了swagger2相关的基本依赖
引入maven依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
   | <dependencies>     <dependency>         <groupId>io.springfox</groupId>         <artifactId>springfox-bean-validators</artifactId>         <version>2.7.0</version>         <scope>test</scope>     </dependency>     <dependency>         <groupId>io.springfox</groupId>         <artifactId>springfox-staticdocs</artifactId>         <version>2.4.0</version>         <scope>test</scope>     </dependency>     <dependency>         <groupId>org.springframework.restdocs</groupId>         <artifactId>spring-restdocs-mockmvc</artifactId>         <scope>test</scope>     </dependency>     <dependency>         <groupId>com.fasterxml.jackson.module</groupId>         <artifactId>jackson-module-jsonSchema</artifactId>         <scope>test</scope>     </dependency>     <dependency>         <groupId>io.github.robwin</groupId>         <artifactId>assertj-swagger</artifactId>         <version>0.2.0</version>         <scope>test</scope>     </dependency>     <dependency>         <groupId>io.github.swagger2markup</groupId>         <artifactId>swagger2markup-spring-restdocs-ext</artifactId>         <version>${swagger2markup.version}</version>         <scope>test</scope>     </dependency> </dependencies>
  <profiles>     <profile>         <id>doc</id>         <build>             <plugins>                 <plugin>                     <groupId>org.asciidoctor</groupId>                     <artifactId>asciidoctor-maven-plugin</artifactId>                     <version>1.5.7</version>                     <configuration>                         <sourceDirectory>src/docs/asciidoc/generated</sourceDirectory>                         <outputDirectory>src/docs/asciidoc/html</outputDirectory>                         <backend>html</backend>                         <sourceHighlighter>coderay</sourceHighlighter>                         <attributes>                             <toc>left</toc>                         </attributes>                     </configuration>                 </plugin>             </plugins>         </build>     </profile> </profiles>
   | 
 
Spring boot配置文件
1 2 3 4 5 6 7 8
   | spring:   application:     name: management-zuul   profiles:     active: doc      logging:   config: classpath:logback-test.xml
   | 
 
编写文档生成测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
   | @WebAppConfiguration @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = {Application.class}) @AutoConfigureMockMvc public class JavaDocTest {
      @Autowired     private MockMvc mockMvc;
      @Test     public void createSpringfoxSwaggerJson() throws Exception {
          String outputDir = "src/docs/asciidoc/source";         MvcResult mvcResult = this.mockMvc.perform(MockMvcRequestBuilders.get("/v2/api-docs")                 .accept(MediaType.APPLICATION_JSON))                 .andExpect(MockMvcResultMatchers.status().isOk())                 .andReturn();
          MockHttpServletResponse response = mvcResult.getResponse();         String swaggerJson = response.getContentAsString();         Files.createDirectories(Paths.get(outputDir));         try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(outputDir, "swagger.json"), StandardCharsets.UTF_8)) {             writer.write(swaggerJson);         }
          Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder()                 .withMarkupLanguage(MarkupLanguage.ASCIIDOC)                 .build();
          Swagger2MarkupConverter.from(Paths.get(outputDir, "swagger.json"))                 .withConfig(config)                 .build()                 .toFile(Paths.get("src/docs/asciidoc/generated/all"));     }
  }
   | 
 
生成文档
运行maven命令,生成文档
1
   | mvn clean test && mvn asciidoctor:process-asciidoc -P doc
   |