Swagger3简介

swagger官网:传送门

swagger是一个Api框架,就是一个工具,就比如我们可以使用postman测试接口一样,swagger主要作用是生成RESTFUL接口的文档并且可以提供功能测试;

可以看一下官方文档简介:

What Is Swagger?

Swagger allows you to describe the structure of your APIs so that machines can read them. The ability of APIs to describe their own structure is the root of all awesomeness in Swagger. Why is it so great? Well, by reading your API’s structure, we can automatically build beautiful and interactive API documentation. We can also automatically generate client libraries for your API in many languages and explore other possibilities like automated testing. Swagger does this by asking your API to return a YAML or JSON that contains a detailed description of your entire API. This file is essentially a resource listing of your API which adheres to OpenAPI Specification. The specification asks you to include information like:

  • What are all the operations that your API supports?
  • What are your API’s parameters and what does it return?
  • Does your API need some authorization?
  • And even fun things like terms, contact information and license to use the API.

大致意思就是通过swagger可以获取项目的api结果,生成清晰的api文档,并可以进行一些自动化测试;

下面我使用一个项目简单示范一下如何使用swagger;

注:该文章介绍的是swagger3的操作,因为swagger3和swagger2有些地方有差异,所以部分操作对swagger2并不适用;

参考:狂神说、Swagger官方文档;

Swagger使用

首先创建一个springboot项目;

这里使用的maven项目管理工具(Gradle等一样),在pom.xml添加swagger3.0的依赖;

<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>

导入依赖包后在启动类上加 @EnableWebMvc 注解,不然会报空指针异常;

@Slf4j
@SpringBootApplication
@EnableWebMvc
public class TakeoutProjectApplication {public static void main(String[] args) {SpringApplication.run(TakeoutProjectApplication.class, args);log.info("项目启动...");}
}

然后可以随便写个controller写几个接口(这里是随便用的一个项目演示):

写一个config配置类:

@Configuration
@EnableOpenApi
public class SwaggerConfig {}

加上 @EnableOpenApi 注解代表启用swagger;

走到这一步这时已经可以开启服务,访问路径:http://localhost:8080/swagger-ui/index.html (本地监听的是8080端口)

因为是Swagger3,所以路径访问和Swagger2不同,这一点一定要注意;可以看一下这个index.html在哪:

访问界面:

当然这里还有这个项目的一些其他controller,这里就用刚才展示的controller示范;

点开可以看到接口基本信息:

可以点开某个接口看看详细信息:

右上角Try it out 就可以发送请求,测试接口;


这就是Swagger的基本使用了,如果想要让文档描述更详细一些,可以在SwaggerConfig类中进行一些配置;

Swagger常用配置

以下是我接触到的一些配置,并不全面,可以参考;

Swagger的实例Bean是Docket对象,可以通过配置Docket实例来配置Swagger;

@Bean
public Docket docket() {return new Docket(DocumentationType.OAS_30);
}

DocumentationType.OAS_30是Swagger实例的接口文档版本,因为使用的是Swagger3,所以选择用 OAS_30,其他的类型还有如下几种,分别对应着Swagger历史版本:

注意:下面的所有Docket配置都可以添加到一个docket方法中,只是分开介绍了;

文档基本信息配置

可以通过Docket的apiInfo属性来对文档进行基本信息的配置:

@Bean
public Docket docket() {return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo());
}

这里的Docket实例需要关联apiInfo属性,因为apiInfo属性可以配置文档的一些基本信息:

我在这里简单配置一下:

private ApiInfo apiInfo() {return new ApiInfoBuilder().title("外卖项目接口文档") // 文档标题.description("基本的一些接口说明") // 文档基本描述.contact(new Contact("xxxx", "https://blog.csdn.net", "xxxx@qq.com")) // 联系人信息.termsOfServiceUrl("http://terms.service.url/组织链接") // 组织链接.version("1.0") // 版本.license("Apache 2.0 许可") // 许可.licenseUrl("https://www.apache.org/licenses/LICENSE-2.0") // 许可链接.extensions(new ArrayList<>()) // 拓展.build();
}

可以看到展示效果:

扫描接口配置

@Bean
public Docket docket() {return new Docket(DocumentationType.OAS_30)// 文档信息配置.apiInfo(apiInfo())// 配置扫描的接口.select()// 配置扫描哪里的接口.apis(RequestHandlerSelectors.basePackage("com.yang.takeout.backend.controller"))// 过滤请求,只扫描请求以/category开头的接口.paths(PathSelectors.ant("/category/**")).build();
}

重启服务访问:

这时就只有一个controller显示了,所有请求也都是以/category开始的;

RequestHandlerSelectors配置扫描路径的一些方法

// 扫描所有,项目中的所有接口都会被扫描到
any()
// 不扫描接口
none()
// 通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求
withMethodAnnotation(final Class<? extends Annotation> annotation)
// 通过类上的注解扫描,如.withClassAnnotation(Controller.class)只扫描有controller注解的类中的接口
withClassAnnotation(final Class<? extends Annotation> annotation)
// 根据包路径扫描接口
basePackage(final String basePackage)

PathSelectors配置扫描请求的一些方法

any() // 任何请求都扫描
none() // 任何请求都不扫描
regex(final String pathRegex) // 通过正则表达式扫描
ant(final String antPattern) // 通过ant()指定请求扫描

开启关闭Swagger配置

这个配置人就很简单了,简单演示一下:

@Bean
public Docket docket() {return new Docket(DocumentationType.OAS_30)// 设置是否启动Swagger,默认为true(不写即可),关闭后Swagger就不生效了.enable(true)
}

该配置再后面用得到;(下面的环境配置就用到了)

Swagger开发环境配置

在开发中有开发环境、测试环境、发布环境,Swagger文档不应该在有些环境中出现,就比如发布环境,不仅占内存,而且接口信息还容易泄露出去;这里就简单演示一下如何在不同的环境下配置Swagger;

application.yml环境配置:

开发环境:

spring:profiles:active: dev

测试环境:

spring:profiles:active: test

配置开发环境dev和测试环境test显示Swagger文档:

@Bean
public Docket docket(Environment environment) {Profiles profiles = Profiles.of("dev", "test"); // 设置要显示swagger的环境boolean isOpen = environment.acceptsProfiles(profiles); // 判断当前是否处于该环境return new Docket(DocumentationType.OAS_30)// 设置是否启动Swagger,通过当前环境进行判断:isOpen.enable(isOpen);
}

可以自己测试一下,非dev和test环境是无法访问Swagger的,这里就不展示了;

API分组

Swagger默认是一个default分组:

可以通过分组来实现对不同API的分类,分组可以使用Docket的groupName属性区分不同分组,并可以在Swagger中创建多个Docket的Bean实例来定义不同分组;

配置多个分组:

@Bean
public Docket docketCategory() {return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo())// 分组名称.groupName("Category").enable(true).select().apis(RequestHandlerSelectors.basePackage("com.yang.takeout.backend.controller"))// 过滤请求,只扫描请求以/category开头的接口.paths(PathSelectors.ant("/category/**")).build();
}@Bean
public Docket docketEmployee() {return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo())// 分组名称.groupName("Employee").enable(true).select().apis(RequestHandlerSelectors.basePackage("com.yang.takeout.backend.controller"))// 过滤请求,只扫描请求以/employee开头的接口.paths(PathSelectors.ant("/employee/**")).build();
}

这里我只配置了两个分组,可以多创建几个Docket实例实现多分组;

分组效果:

Category分组:

Employee分组:

Swagger常见注解

下面还有一些常见的Swagger注解,同样是对文档进行补充的:

Swagger注解 简单说明
@Api(tags = “xxx模块说明”) 作用在模块类上
@ApiOperation(“xxx接口说明”) 作用在接口方法上
@ApiModel(“xxxPOJO说明”) 作用在模型类上:如VO、BTO
@ApiModelProperty(value = “xxx属性说明”,hidden = true) 作用在类方法和属性上,hidden设置为true可以隐藏该属性
@ApiParam(“xxx参数说明”) 作用在参数、方法和字段上,类似@ApiModelProperty

这些注解只是对文档的一些接口信息的补充,根据实际情况使用;

这里就不一一演示了;

总结

Swagger的出现让实际多人协作下的开发效率大大提升,这是工作中常用的工具,所以很有必要了解学习;希望大家都能有所收获;

Swagger3的基本使用相关推荐

  1. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  2. Springboot2 Swagger3 集成

    文章目录 一.默认UI 1. 版本尝鲜 2. 导入依赖 3. Swagger3Config配置类 4. Swagger3.0常用注解 4.Controller 层使用Swagger3注解例子 5.访问 ...

  3. SpringBoot实战教程(1)| 整合Swagger3.0.0

    本文教你如何在SpringBoot中整合Swagger,快速实现在线接口文档. Swagger版本:3.0.0 SpringBoot版本:2.5.6 目录 一.初始化SpringBoot项目 二.引入 ...

  4. Spring Boot整合Swagger3配置全局Token

    应用背景:Swagger配置全局Token的目的在于调用真正接口前会被相关拦截器拦截,拦截器会校验此次访问是否合法,这时配置全局Token的作用就显现出来了,全局Token可以存储所有接口访问时的令牌 ...

  5. Spring Boot整合Swagger3注解@ApiImplicitParam的paramType属性为“path“

    Spring Boot整合Swagger3的依赖版本为: <!--引入SpringBoot整合Swagger3的依赖--> <dependency><groupId> ...

  6. Spring Boot整合Swagger3注解@ApiImplicitParam的allowMultiple属性

    Spring Boot整合Swagger3的依赖版本为: <!--引入SpringBoot整合Swagger3的依赖--> <dependency><groupId> ...

  7. Spring Boot整合Swagger3的分组问题

    Swagger3如果没有设置分组,则所有的API接口全在一个default分组中,如下所示: 但是如果功能模块和接口数量逐渐增多时,就会显得有些凌乱,不方便查找和使用,这时可提供的解决方法就是对API ...

  8. Spring Boot整合Swagger3

    第一步:引入SpringBoot整合Swagger2的最版版本3.0.0,目前的更新时间为2020年7月 <!--引入SpringBoot整合Swagger3的依赖--> <depe ...

  9. Spring boot集成Swagger3

    一.导入依赖 这里以springfox来使用:SpringFox是 spring 社区维护的一个项目(非官方),帮助使用者将 swagger2 集成到 Spring 中.常常用于 Spring 中帮助 ...

  10. SpringBoot 整合swagger3.X

    SpringBoot 整合swagger3.X 1. 引入依赖 2. swagger配置 3. 启动程序访问 4. 集成增强文档knife4j 4.1 添加依赖 4.2 swagger配置类添加@En ...

最新文章

  1. 对抗攻击层出不穷?神经科学带来新突破、导出智能统一框架,Hinton:我早有洞见...
  2. 015_请求转发和重定向
  3. 【深度学习】有个洋人小哥把整个 CNN 都给可视化了,卷积、池化清清楚楚!...
  4. Exchange系列—Exchange自带灾难恢复工具使用
  5. CRM呼叫中心和社交媒体集成的技术实现
  6. Linux如何建立用户(组)及调整用户(组)属性(案列+详细指令)
  7. HAOI2018游记
  8. MATLAB转化彩色图片为灰度图片命令行窗口代码:
  9. Java学习系列(十九)Java面向对象之数据库编程
  10. mac地址厂商查询_3.15干货你的手机mac地址泄漏了吗
  11. 《Using OpenRefine》翻译~17
  12. 清理xcode模拟器_mac太卡,清除xcode和模拟器缓存
  13. lattice planner 规划详解
  14. 无法运行宏,可能是因为该宏在此工作簿中不可用,或者所有的宏都被禁用的解决方法...
  15. 计算机网络 学习通 第三章作业
  16. 宿主机连接oracle容器_Linux虚拟机与windows宿主机oracle的连接配置
  17. 密码算法详解——AES
  18. 【python学习】列表、元组、字典、集合(详解)
  19. vue+uni-app商城实战 | 第一篇:从0到1快捷开发一个商城微信小程序,无缝接入OAuth2实现一键授权登录
  20. macbook将新壁纸添加到官网壁纸中

热门文章

  1. HTTP 临时重定向302与307的区别与联系
  2. 程序员作图软件-推荐
  3. 用npm安装bootstrap以及通过npm下载项目依赖的包的过程
  4. 转载【光打枪好有个鸟用】献给无数正在奋斗的程序员
  5. 学习操作系统前怎么学会编程
  6. Git权限不够报error: could not lock config file C:...
  7. js 里面的键盘码对应的值
  8. 污水处理中php是什么药剂,污水处理中常用药剂介绍
  9. W5500初始化过程
  10. 医院管理系统(新手适用)