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
|