本篇文章小编给大家分享一下使用Swagger实现接口版本号管理方式代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
前言:使用swagger暴露对外接口时原则是每个系统在不同的迭代版本仅仅需要暴露该迭代版本的接口给外部使用,客户端不需要关心不相关的接口
先来看张效果图
下面是实现代码:
定义注解ApiVersion:
/** * 接口版本管理注解 * @author 周宁 * @Date 2018-08-30 11:48 */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface ApiVersion { /** * 接口版本号(对应swagger中的group) * @return String[] */ String[] group(); }
定义一个用于版本常量的类ApiVersionConstant
/** * api版本号常量类 * @author 周宁 * @Date 2018-08-30 13:30 */ public interface ApiVersionConstant { /** * 图审系统手机app1.0.0版本 */ String FAP_APP100 = "app1.0.0"; }
更改SwaggerConfig添加Docket(可以理解成一组swagger 接口的集合),并定义groupName,根据ApiVersion的group方法区分不同组(迭代)的接口,代码如下:
@Configuration @EnableSwagger2 @EnableWebMvc public class SwaggerConfig { //默认版本的接口api-docs分组 @Bean public Docket vDefault(){ return new Docket(DocumentationType.SWAGGER_2) .apiInfo(buildApiInf()) .select() .apis(RequestHandlerSelectors.basePackage("com.gysoft"))//controller路径 .paths(PathSelectors.any()) .build(); } //app1.0.0版本对外接口 @Bean public Docket vApp100(){ return new Docket(DocumentationType.SWAGGER_2) .apiInfo(buildApiInf()) .groupName(FAP_APP100) .select() .apis(input -> { ApiVersion apiVersion = input.getHandlerMethod().getMethodAnnotation(ApiVersion.class); if(apiVersion!=null&&Arrays.asList(apiVersion.group()).contains(FAP_APP100)){ return true; } return false; })//controller路径 .paths(PathSelectors.any()) .build(); } private ApiInfo buildApiInf(){ return new ApiInfoBuilder() .title("接口列表") .termsOfServiceUrl("http://127.0.0.1:8080/swagger-ui.html") .description("springmvc swagger 接口测试") .version("1.0.0") .build(); } }
立即食用
/** * @author 周宁 * @Date 2018-08-24 11:05 */ @RestController @RequestMapping("/document") @Api(value = "资料文档或者CAD图纸", description = "资料文档或者CAD图纸") public class DocumentController extends GyBasicSession { private static final Logger logger = LoggerFactory.getLogger(DocumentController.class); @ApiImplicitParams({@ApiImplicitParam(name = "page", value = "当前页数", dataType = "int", paramType = "path"), @ApiImplicitParam(name = "pageSize", value = "每页大小", dataType = "int", paramType = "path"), @ApiImplicitParam(name = "projectId", value = "项目id", dataType = "string", paramType = "path"), @ApiImplicitParam(name = "stageNum", value = "阶段编号", dataType = "string", paramType = "path"), @ApiImplicitParam(name = "type", value = "0资料(文档);1cad图纸", dataType = "int", paramType = "path"), @ApiImplicitParam(name = "searchkey", value = "搜索关键字", dataType = "string", paramType = "query")}) @ApiOperation("分页获取资料文档(CAD图纸)列表数据") @GetMapping("/pageQueryAppDocumentInfo/{page}/{pageSize}/{projectId}/{stageNum}/{type}") @ApiVersion(group = ApiVersionConstant.FAP_APP100) public PageResultpageQueryAppDocumentInfo(@PathVariable Integer page, @PathVariable Integer pageSize, @PathVariable String projectId, @PathVariable String stageNum, @PathVariable Integer type, @RequestParam String searchkey) { return null; } }
使用swagger测试接口
swagger:自动扫描 controller 包下的请求,生成接口文档,并提供测试功能。
引入依赖
io.springfox springfox-swagger2 2.9.2 io.springfox springfox-swagger-ui 2.9.2
在 config 包引入 swagger 自定义配置类
package com.zhiyou100.zymusic.config; 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.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; /** * @author teacher * @date 2019/9/25 */ @Configuration @EnableSwagger2 public class MySwaggerConfiguration { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() //标题 .title("Spring Boot 中使用 Swagger2 构建 RESTful APIs") //简介 .description("hello swagger") //服务条款 .termsOfServiceUrl("1. xxxn2. xxxn3. xxx") //作者个人信息 .contact(new Contact("admin", "http://www.zhiyou100.com", "[email protected]")) //版本 .version("1.0") .build(); } }
启动项目后,使用 http://localhost:8080/swagger-ui.html
选择需要测试的接口:Try it out -> 填写参数 -> Execute -> 查看响应
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔