SpringBoot学习之整合Swagger
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的更多相关文章
- SpringBoot学习笔记:Swagger实现文档管理
SpringBoot学习笔记:Swagger实现文档管理 Swagger Swagger是一个规范且完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.Swagger的目标是对RE ...
- SpringBoot学习之整合Mybatis
本博客使用IDEA开发工具,通过Maven构建SpringBoot项目,初始化项目添加的依赖有:spring-boot-starter-jdbc.spring-boot-starter-web.mys ...
- SpringBoot学习之整合Druid的简单应用
一.Druid介绍 Druid简介 Druid是目前Java语言中最好的数据库连接池之一.结合了 C3P0.DBCP 等 DB 池的优点,同时加入了日志监控.Druid 是一个分布式的.支持实时多维 ...
- 从零开始的SpringBoot项目 ( 五 ) 整合 Swagger 实现在线API文档的功能
综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...
- SpringBoot学习:整合Mybatis,使用HikariCP超高性能数据源
一.添加pom依赖jar包: <!--整合mybatis--> <dependency> <groupId>org.mybatis.spring.boot</ ...
- springboot学习2 整合mybatis
springboot整合mybatis 一.添加mybatis和数据库连接的依赖 <!--整合mybatis--> <dependency> <groupId>or ...
- SpringBoot学习:整合shiro(身份认证和权限认证),使用EhCache缓存
项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 (一)在pom.xml中添加依赖: <properties> <shi ...
- SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器 /** * cookie对象; * rememberMeCookie()方法是设置Cookie的生成模版,比如cookie的name,cooki ...
- SpringBoot学习:整合shiro(rememberMe记住我后自动登录session失效解决办法)
项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 定义一个拦截器,判断用户是通过记住我登录时,查询数据库后台自动登录,同时把用户放入ses ...
随机推荐
- 一文读懂对抗生成学习(Generative Adversarial Nets)[GAN]
一文读懂对抗生成学习(Generative Adversarial Nets)[GAN] 0x00 推荐论文 https://arxiv.org/pdf/1406.2661.pdf 0x01什么是ga ...
- bzoj3526[Poi2014]Card*
bzoj3526[Poi2014]Card 题意: 有n张卡片在桌上一字排开,每张卡片上有两个数,第i张卡片上,正面的数为a[i],反面的数为b[i].有m个操作,第i个操作会交换c[i]和d[i]两 ...
- 【高性能Mysql 】读书笔记(一)
第1章 Mysql架构与历史 MYSQL最重要.最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理( Query Processing)及其他系统任务( Server Task)和数据的存储 ...
- 索引中丢失 IN 或 OUT 参数:: 103,解决办法
索引中丢失 IN 或 OUT 参数:: 103 这个原因是数据库中的字段类型与SQL语句中的类型不匹配造成的,103代表第103个字段参数错误.找到对应参数配置或者SQL中这个参数的类型是否与数据库 ...
- ResNeXt论文阅读笔记.md
目录 1. 提出背景 2. 核心思想 3. 论文核心 4. 分组卷积 5. 核心代码 论文: Aggregated Residual Transformations for Deep Neural N ...
- MapReduce之自定义InputFormat
在企业开发中,Hadoop框架自带的InputFormat类型不能满足所有应用场景,需要自定义InputFormat来解决实际问题. 自定义InputFormat步骤如下: (1)自定义一个类继承Fi ...
- ionic环境安装步骤
注:准确性有待考证,仅供参考. 1,安装jdk 配置环境变量:java_home和path2,安装node 检查版本 node -v3,安装npm:npm i cnpm -g 检查版本:cnpm -v ...
- 【JVM之内存与垃圾回收篇】StringTable
StringTable String的基本特性 String:字符串,使用一对 "" 引起来表示 String s1 = "Nemo"; // 字面量的定义方式 ...
- 从零开始学Electron笔记(七)
在之前的文章我们介绍了一下Electron中的对话框 Dialog和消息通知 Notification,接下来我们继续说一下Electron中的系统快捷键及应用打包. 全局快捷键模块就是 global ...
- u盘安装 osx 出现 “不能验证”
关于安装是出现关于出现“不能验证”错误: 解决办法 :打开终端 在"终端"里面修改时间 输入:date 032208102015.20