Swagger介绍

1.什么是Swagger

作为后端程序开发,我们多多少少写过几个后台接口项目,不管是编写手机端接口,还是目前比较火热的前后端分离项目,前端与后端都是由不同的工程师进行开发,那么这之间的沟通交流通过接口文档进行连接。但往往伴随很多问题,后端程序员认为编写接口文档及维护太花费时间精力,前端的认为接口文档变动更新不及时,导致程序之间相互调用出行问题。那么能简化接口文档的编写直接自动生成吗?当然能!如是乎Swagger这种接口文档在线自动生成工具便孕育而生。

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。

2.Swagger优点

  • 代码变,文档变。只需要少量的注解,Swagger 就可以根据代码自动生成 API 文档,很好的保证了文档的时效性。
  • 跨语言性,支持 40 多种语言。
  • Swagger UI 呈现出来的是一份可交互式的 API 文档,我们可以直接在文档页面尝试 API 的调用,省去了准备复杂的调用参数的过程。
  • 还可以将文档规范导入相关的工具(例如 Postman、SoapUI), 这些工具将会为我们自动地创建自动化测试。

SpringBoot中整合Swagger

1.基础环境构建

首先搭建一个基础的SpringBoot项目,导入以下Swagger启动器

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

编写一个用于测试的controller

@RestController
public class HelloController { @PostMapping(value = "/hello")
public String hello(){
return "hello";
}
}

编写Swagger的配置类

@Configuration
@EnableOpenApi
public class SwaggerConfig {
}

运行启动输入地址:http://localhost:8080/swagger-ui/index.html

可以看到Swagger接口文档页面,说明基本配置环境成功!

注意事项:

Swagger3.0版本的地址是http://localhost:8088/swagger-ui/index.html,2.x版本中访问的地址的为http://localhost:8088/swagger-ui.html

2.配置Swagger

配置Swagger首先需要构建其Bean实例 Docket对象,在刚刚创建的SwaggerConfig 配置类中创建一个Docket

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

Docket(DocumentationType.OAS_30) ,我们这里选择的参数是 DocumentationType.OAS_30,这是一个Swagger实例的接口文档版本,我们这里是3.0,所以选择用 OAS_30,其他的类型还有如下几种,分别对应着Swagger历史版本

 public static final DocumentationType SWAGGER_12 = new DocumentationType("swagger", "1.2");
public static final DocumentationType SWAGGER_2 = new DocumentationType("swagger", "2.0");
public static final DocumentationType OAS_30 = new DocumentationType("openApi", "3.0");

构建Docket需要创建 ApiInfo 实例

private ApiInfo apiInfo(){
// 作者信息
Contact contact = new Contact("TIOXY", "https://www.cnblogs.com/tioxy/", "1369773052@qq.com"); return new ApiInfo(
"Tioxy的接口文档",
"项目描述",
"1.0",
"https://www.cnblogs.com/tioxy/",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}

ApiInfo 主要作用是构建我们接口文档的页面显示的基础信息,展示如下位置

3.配置扫描接口及开关

构建Docket时通过 select() 方法配置扫描接口。Docket的完整代码如下:

@Bean
public Docket docket(Environment environment){
// 设置显示的Swagger环境
Profiles dev = Profiles.of("dev");
// 获取项目环境
boolean flag = environment.acceptsProfiles(dev); return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
// 配置Api文档分组
.groupName("TIOXY")
// enable()是否启用Swagger,默认是true
.enable(flag)
.select()
// RequestHandlerSelectors,配置要扫描接口的方式
// basePackage指定要扫描的包
// any()扫描所有,项目中的所有接口都会被扫描到
// none()不扫描
// withClassAnnotation()扫描类上的注解
// withMethodAnnotation()扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.tioxy.controller"))
// paths()过滤某个路径
.paths(PathSelectors.any())
.build();
}
  • groupName("TIOXY"):表示此Docket实例的名字,也就是接口文档页面右上角选择的实例名,实际开发中我们是多人开发,对应的就是多个Docket实例
  • enable(flag)enable()是否启用Swagger,默认是true

我们这里使用的是动态的配置是否启用Swagger,通过 Environment 来获取此时运行的项目环境名称,如果是 dev,则定义一个flag,来动态的设置是否启用

4.实体类配置

新建一个User实体类

@ApiModel("用户实体")
public class User {
@ApiModelProperty("用户名")
public String username;
@ApiModelProperty("密码")
public String password;
}

只要这个实体在请求接口的返回值上(即使是泛型),都能映射到实体项中:

@RequestMapping("/getUser")
public User getUser(){
return new User();
}

5.常用注解

我们也可以在接口上添加注释说明,方便我们在接口文档中解释说明接口的信息,例如接口的作用、参数说明等,方便调用者使用

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

文章参考

狂神说Java系列之SpringBoot整合Swagger学习笔记

SpringBoot学习之整合Swagger的更多相关文章

  1. SpringBoot学习笔记:Swagger实现文档管理

    SpringBoot学习笔记:Swagger实现文档管理 Swagger Swagger是一个规范且完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.Swagger的目标是对RE ...

  2. SpringBoot学习之整合Mybatis

    本博客使用IDEA开发工具,通过Maven构建SpringBoot项目,初始化项目添加的依赖有:spring-boot-starter-jdbc.spring-boot-starter-web.mys ...

  3. SpringBoot学习之整合Druid的简单应用

    一.Druid介绍 Druid简介 Druid是目前Java语言中最好的数据库连接池之一.结合了 C3P0.DBCP 等 DB 池的优点,同时加入了日志监控.Druid 是一个分布式的.支持实时多维 ...

  4. 从零开始的SpringBoot项目 ( 五 ) 整合 Swagger 实现在线API文档的功能

    综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...

  5. SpringBoot学习:整合Mybatis,使用HikariCP超高性能数据源

    一.添加pom依赖jar包: <!--整合mybatis--> <dependency> <groupId>org.mybatis.spring.boot</ ...

  6. springboot学习2 整合mybatis

    springboot整合mybatis 一.添加mybatis和数据库连接的依赖 <!--整合mybatis--> <dependency> <groupId>or ...

  7. SpringBoot学习:整合shiro(身份认证和权限认证),使用EhCache缓存

    项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 (一)在pom.xml中添加依赖: <properties> <shi ...

  8. SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)

    首先在shiro配置类中注入rememberMe管理器 /** * cookie对象; * rememberMeCookie()方法是设置Cookie的生成模版,比如cookie的name,cooki ...

  9. SpringBoot学习:整合shiro(rememberMe记住我后自动登录session失效解决办法)

    项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 定义一个拦截器,判断用户是通过记住我登录时,查询数据库后台自动登录,同时把用户放入ses ...

随机推荐

  1. Hello!GitHub 好用好玩值得收藏的开源项目集合~

    这是我许久以来从各处发现的极佳开源项目,希望分享给大家~ 如果帮到你了,给我个赞好嘛 编程语言类 ️learn-go-with-tests(通过单元测试学Go) GitHub地址:https://gi ...

  2. Spirngboot-自定义Starter

    一.Spring Boot Starter简介 Starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境( 条件 ...

  3. 【面试题资源共享】一文总结最高频软件测试|sq|语句|思维发散|计算机基础|Linux|测试用例|接口测试|等技术面试题

    思维发散 1.一个球, -把尺子长度是球直径的2/3,怎样测出半径?2.四枚硬币,花面朝上,每次翻转三个,几次可以将四枚硬币变为字面朝上?3. U2合唱团在1 7分钟内赶到演唱会现场问题?4.小明一家 ...

  4. Ethical Hacking - POST EXPLOITATION(2)

    MAINTAINING ACCESS - Methods 1. Using a veil-evasion Rev_http_service Rev_tcp_service Use it instead ...

  5. ASP.Net Core 3.1 With Autofac ConfigureServices returning an System.IServiceProvider isn't supported.

    ASP.Net Core 3.1 With Autofac ConfigureServices returning an System.IServiceProvider isn't supported ...

  6. 设计模式:prototype模式

    使用场景:在不能根据类创建对象的时候,根据已有的对象创建对象 不能根据类创建对象的情况: 创建一个类的对象时,需要根据多种对象来创建,创建的过程非常复杂 难以根据类生成对象 例子: class Pro ...

  7. [jvm] -- 常用内存参数配置篇

    新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ) Eden : from : to = 8 : 1 : 1 ( 可 ...

  8. 题解 洛谷 P4171 【[JSOI2010]满汉全席】

    考虑\(2-SAT\). 将汉式看作\(0\)状态,满式看做\(1\)状态,将每个材料拆成\(01\)两个状态. 从\(a\)向\(b\)连有向边表示的意义为选了\(a\)后必须选\(b\). 那么每 ...

  9. 任务调度中心xxl-job对外接口使用

    xxl-job主要分为调度中心和执行器提供了图像化界面,操作简单上手快,基本实现定时任务自动执行,同时可以针对任务日志进行查看.具体xxl-job可以再github上下载:https://github ...

  10. Mysql的复制原理以及流程

    MySQL复制概述 简单来说就是保证主服务器(Master)和从服务器(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟),通过 ...