swagger文档生成与查看-业务模块-Saas多租户平台开发
目录
内容
本文只是简述swagger2如何生成文档过程,关于swagger2详细教程以及源码之类的可自行查阅相关文档。
1、API 文档
现在项目基本上都是前后端分离模式,而且前后端分别由不同的团队开发,那么前后端开发人员的交流就变得很关键。选择好的交流方式,提高开发效率;反之,影响项目进度。
同为技术人员,写API文档成为很好的交互方案。swagger2模块,通过简单添加注解,就可以自动生成API文档。
2、swagger2生成API文档
- swagger2生成API步骤:
- 引入依赖
- springfox-swagger2
- springfox-swagger-ui
- 创建swagger配置类
- 说明:
-
@EnableSwagger2注解是必须的
-
其他信息根据需要配置
package com.ihrm.common.config; import io.swagger.annotations.ApiOperation; 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; /** * Swagger配置 */ @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() //加了ApiOperation注解的类,生成接口文档 .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) //包下的类,生成接口文档 //.apis(RequestHandlerSelectors.basePackage("io.renren.modules.job.controller")) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("ihrm开源") .description("ihrm-company文档") .termsOfServiceUrl("https://www.gaogzhen.com") .version("4.0.0") .build(); } }
-
- 在需要生成API文档的Controller和方法内添加注解
-
@Api(tage=“xxx”) xxx为该controller中文描述
-
@ApiOption(“xxx”) xxx 为方法中文描述
-
示例如下
package com.ihrm.modules.sys.controller; import com.ihrm.common.utils.PageUtils; import com.ihrm.common.utils.R; import com.ihrm.modules.sys.entity.CoCompanyEntity; import com.ihrm.modules.sys.service.CoCompanyService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Arrays; import java.util.Map; /** * * * @author gaogzhen * @email [email protected] * @date 2020-11-16 15:20:30 */ @RestController @RequestMapping("sys/cocompany") @Api(tags = "公司") public class CoCompanyController { @Autowired private CoCompanyService coCompanyService; /** * 列表 */ @GetMapping("/list") // @RequiresPermissions("sys:cocompany:list") @ApiOperation("列表") public R list(@RequestParam Map<String, Object> params){ PageUtils page = coCompanyService.queryPage(params); return R.ok().put("page", page); } /** * 信息 */ @GetMapping("/info/{id}") // @RequiresPermissions("sys:cocompany:info") @ApiOperation("根据ID查询公司信息") public R info(@PathVariable("id") String id){ CoCompanyEntity coCompany = coCompanyService.getById(id); return R.ok().put("coCompany", coCompany); } /** * 保存 */ @PostMapping("/save") // @RequiresPermissions("sys:cocompany:save") @ApiOperation("添加") public R save(@RequestBody CoCompanyEntity coCompany){ coCompanyService.save(coCompany); return R.ok(); } /** * 修改 */ @PostMapping("/update") // @RequiresPermissions("sys:cocompany:update") @ApiOperation("修改") public R update(@RequestBody CoCompanyEntity coCompany){ // ValidatorUtils.validateEntity(coCompany); coCompanyService.updateById(coCompany); return R.ok(); } /** * 删除 */ @DeleteMapping("/delete") // @RequiresPermissions("sys:cocompany:delete") @ApiOperation("删除") public R delete(@RequestBody String[] ids){ coCompanyService.removeByIds(Arrays.asList(ids)); return R.ok(); } }
-
- 运行模块,查看效果,路径-项目路径/swagger-ui.html,如图:
- 说明:
3、优化API文档显示
3.1、汉化
不难看出,上面显示的API文档基本上英文。第一步,文档汉化,步骤:
-
resources文件夹下创建META-INF/resources/文件夹
-
把文件swagger-ui.html放入上面的文件夹,详细代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Swagger UI</title> <link rel="icon" type="image/png" href="webjars/springfox-swagger-ui/images/favicon-32x32.png" sizes="32x32"/> <link rel="icon" type="image/png" href="webjars/springfox-swagger-ui/images/favicon-16x16.png" sizes="16x16"/> <link href='webjars/springfox-swagger-ui/css/typography.css' media='screen' rel='stylesheet' type='text/css'/> <link href='webjars/springfox-swagger-ui/css/reset.css' media='screen' rel='stylesheet' type='text/css'/> <link href='webjars/springfox-swagger-ui/css/screen.css' media='screen' rel='stylesheet' type='text/css'/> <link href='webjars/springfox-swagger-ui/css/reset.css' media='print' rel='stylesheet' type='text/css'/> <link href='webjars/springfox-swagger-ui/css/print.css' media='print' rel='stylesheet' type='text/css'/> <script src='webjars/springfox-swagger-ui/lib/object-assign-pollyfill.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/lib/jquery-1.8.0.min.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/lib/jquery.slideto.min.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/lib/jquery.wiggle.min.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/lib/jquery.ba-bbq.min.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/lib/handlebars-4.0.5.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/lib/lodash.min.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/lib/backbone-min.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/swagger-ui.min.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/lib/highlight.9.1.0.pack.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/lib/highlight.9.1.0.pack_extended.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/lib/jsoneditor.min.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/lib/marked.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/lib/swagger-oauth.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/springfox.js' type='text/javascript'></script> <!--国际化操作:选择中文版 --> <script src='webjars/springfox-swagger-ui/lang/translator.js' type='text/javascript'></script> <script src='webjars/springfox-swagger-ui/lang/zh-cn.js' type='text/javascript'></script> </head> <body class="swagger-section"> <div id='header'> <div class="swagger-ui-wrap"> <a id="logo" href="http://swagger.io"> <img class="logo__img" alt="swagger" height="30" width="30" src="webjars/springfox-swagger-ui/images/logo_small.png" /> <span class="logo__title">swagger</span> </a> <form id='api_selector'> <div class='input'> <select id="select_baseUrl" name="select_baseUrl"></select> </div> <div class='input'><input placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text"/></div> <div id='auth_container'></div> <div class='input'><a id="explore" class="header__btn" href="#" data-sw-translate>Explore</a></div> </form> </div> </div> <div id="message-bar" class="swagger-ui-wrap" data-sw-translate> </div> <div id="swagger-ui-container" class="swagger-ui-wrap"></div> </body> </html>
重点就是文中注释下面2行,引入中文包和响应的翻译器。改造之后效果如图:
汉化之后,页面排版感觉有点‘丑’有没有?而且文档不能下载,也就是离线情况下不能查看,下面我们加以优化。
3.2、页面及功能优化
优化主要是前端优化,后端代码部分不变,步骤也很简单,只需引入一个依赖:
- 引入依赖 swagger-bootstrap-ui
重启模块,原先的swagger-ui.html依然可以访问,新的访问路由-项目路径/doc.html,如图:
3.3、测试
-
填写测试数据
-
发送
-
查看页面响应,如图:
-
查看表中数据,如图:
swagger生成文档部分简单介绍到这里,项目需求和基本的架子搭建完毕,下面开始业务逻辑部分。
后记 :
本项目为参考某马视频开发,相关视频及配套资料可自行度娘或者联系本人。上面为自己编写的开发文档,持续更新。欢迎交流,本人QQ:806797785
后端JAVA源代码地址:https://gitee.com/gaogzhen/ihrm-parent // 后端项目
前端项目源代码地址:https://gitee.com/gaogzhen/ihrm-vue // 前端后台管理系统