swagger 导出离线文档_项目工具三:Swagger导出离线版HTML5和PDF格式api文档
发布日期:2021-10-31 09:15:02 浏览次数:5 分类:技术文章

本文共 5025 字,大约阅读时间需要 16 分钟。

之前的文章讲解了swagger2注解的用法以及实例演示,本篇文章介绍一下如何使用swagger2导出离线版的api文档,分为两种格式一个是HTML5一个是PDF。对象属性、接口说明、测试用例都可以导出来方便开发人员很清楚的了解接口!

相关版本

Springboot版本:1.5.10.RELEASE

swagger2版本:2.6.1

maven版本:3.2.5

JDK版本:8

IDEA版本:2017.2.6

大家自己测试的时候如果不成功尽量和我版本保持一致。

index.adoc配置

include::{generated}/overview.adoc[]

include::{generated}/definitions.adoc[]

include::{generated}/paths.adoc[]

pom.xml配置

pom里面不比之前需要多配置一些东西,这个是大家需要注意的。

properties配置:

UTF-8

UTF-8

1.8

${project.build.directory}/generated-snippets

${project.basedir}/docs/asciidoc

${project.build.directory}/asciidoc

${project.build.directory}/asciidoc/html

${project.build.directory}/asciidoc/pdf

dependencies依赖配置:

com.alibaba

fastjson

1.2.46

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-starter-web

io.springfox

springfox-swagger2

2.6.1

io.springfox

springfox-swagger-ui

2.6.1

org.springframework.restdocs

spring-restdocs-mockmvc

1.1.2.RELEASE

test

io.springfox

springfox-staticdocs

2.6.1

org.projectlombok

lombok

1.16.20

plugins插件配置:

org.apache.maven.plugins

maven-surefire-plugin

org.asciidoctor

asciidoctor-maven-plugin

1.5.3

org.asciidoctor

asciidoctorj-pdf

1.5.0-alpha.14

org.jruby

jruby-complete

1.7.21

${asciidoctor.input.directory}

index.adoc

book

left

3

${generated.asciidoc.directory}

output-html

test

process-asciidoc

html5

${asciidoctor.html.output.directory}

output-pdf

test

process-asciidoc

pdf

${asciidoctor.pdf.output.directory}

Swagger2Config配置类

public class Swagger2Config {

@Bean

public Docket createRestApi() {

return new Docket(DocumentationType.SWAGGER_2)

.apiInfo(apiInfo())

.select()

.apis(RequestHandlerSelectors.basePackage("com.czq.offline.controller"))

.paths(PathSelectors.any())

.build();

}

private ApiInfo apiInfo() {

return new ApiInfoBuilder()

.title("springboot利用swagger构建api文档,可以导出离线的HTML和PDF文档")

.description("简单优雅的restfun风格")

//                .termsOfServiceUrl("https://blog.csdn.net/moyanxiaoq")

.contact("chenzhiq")

.version("1.0")

.build();

}

}

User实体类

@Data

@AllArgsConstructor

@NoArgsConstructor

@ApiModel(description="用户的实体对象")

public class User {

/**

*id

*/

@ApiModelProperty(value="用户id",name="id",required=true)

private String id;

/**

*名字

*/

@ApiModelProperty(value="用户名",name="name",required=true)

private String name;

/**

*年龄

*/

private Integer age;

}

UserController

@RestController

@RequestMapping(value = "/user", produces =  MediaType.APPLICATION_JSON_VALUE)

@Api(value = "用户信息查询", description = "用户基本信息操作API", tags = "UserController", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)

public class UserController {

@ApiOperation(value = "/getUser", notes = "根据姓名查询用户信息")

@RequestMapping(value = "getUser", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)

@ResponseBody

public User getUser(@RequestParam("name") String name){

User user = new User();

user.setId("123");

user.setName(name);

user.setAge(25);

return user;

}

@ApiOperation(value = "/addUser", notes = "添加一个用户")

@RequestMapping(value = "addUser", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)

@ResponseBody

public User addUser(@RequestBody User user){

return user;

}

}

关键的Test类

@AutoConfigureMockMvc

@AutoConfigureRestDocs(outputDir = "target/generated-snippets")

@RunWith(SpringRunner.class)

@SpringBootTest

public class Swagger2OfflineApplicationTests {

private String snippetDir = "target/generated-snippets";

private String outputDir  = "target/asciidoc";

@Autowired

private MockMvc mockMvc;

@After

public void Test() throws Exception {

// 得到swagger.json,写入outputDir目录中

mockMvc.perform(get("/v2/api-docs").accept(MediaType.APPLICATION_JSON))

.andDo(SwaggerResultHandler.outputDirectory(outputDir).build())

.andExpect(status().isOk())

.andReturn();

// 读取上一步生成的swagger.json转成asciiDoc,写入到outputDir

// 这个outputDir必须和插件里面标签配置一致

Swagger2MarkupConverter.from(outputDir + "/swagger.json")

.withPathsGroupedBy(GroupBy.TAGS)// 按tag排序

.withMarkupLanguage(MarkupLanguage.ASCIIDOC)// 格式

.withExamples(snippetDir)

.build()

.intoFolder(outputDir);// 输出

}

@Test

public void Test2() throws Exception{

User user = new User();

user.setId("123");

user.setName("FLY");

user.setAge(25);

mockMvc.perform(post("/user/addUser").contentType(MediaType.APPLICATION_JSON)

.content(JSON.toJSONString(user))

.accept(MediaType.APPLICATION_JSON))

.andExpect(status().is2xxSuccessful())

.andDo(MockMvcRestDocumentation.document("addUser", preprocessResponse(prettyPrint())));

}

@Test

public void TestApi() throws Exception {

mockMvc.perform(get("/user/getUser").param("name", "FLY")

.accept(MediaType.APPLICATION_JSON))

.andExpect(status().isOk())

.andDo(MockMvcRestDocumentation.document("getUser", preprocessResponse(prettyPrint())));

}

}

目录结构以及yml配置

测试

代码完成后就可启动项目访问:http://localhost:9999/swagger-ui.html 这个是在线的文档显示。导出离线的需要进入当前项目的根路径执行命令:mvn clean test

如果接口多的话命令会执行一会。结束后在 target/asciidoc 目录下会生成两个文件夹分别是 html 和 pdf 里面就是对应格式的离线文档了。

如果你的测试用例都写了而且可以测试通过,这个例子也将会显示在导出的离线文档里。

获取源码地址:https://github.com/moyanxiaoq/boot-demo/tree/master/swagger-offline

转载地址:https://blog.csdn.net/weixin_39945523/article/details/111755130 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:濮阳第二届创客机器人比赛_小创客 未来梦 我市举行第二届青少年机器人竞赛...
下一篇:gateway 内存溢出问题_开发中内存溢出问题及解决

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月01日 18时33分31秒