Swagger简介及Springboot集成Swagger详细教程
学习目标
- 了解Swagger的作用和概念
- 了解前后端分离
- 在SpringBoot中集成Swagger
1、Swagger简介
前后端分离
Vue+SpringBoot
后端时代
前端只用管理静态页面;html–>后端。模版引擎JSP–>后端是主力
前后端分离式时代
- 后端:后端控制层,服务层,数据访问层【后端团队】
- 前端:前端控制层,视图层【前端团队】
- 前后端如何交互?===>API
- 前后端相对独立,松耦合
- 前后端甚至可以部署在不同的服务器上
产生一个问题:
- 前后端集成联调,前段人员和后端人员无法做到“即使协商,尽早解决”,最终导致问题集中爆发;
- 首先指定schema[计划的提纲],实时更新最新API,降低集成的风险
- 前后端分离:
- 前后端测试后端接口:
postman
- 后端提供接口,需要实时更新最新的消息以及改动
- 前后端测试后端接口:
2、Swagger应运而生
- 号称世界上最流行的Api框架
- RestFul Api文档在线自动生成工具=>Api文档与API定义同步更新
- 直接运行,可以在线测试API接口
- 支持多种语言:Java,Php…
https://swagger.io/
在项目中使用Swagger
- Swagger2
- Swagger-ui
3、SpringBoot集成Swagger
1、新建一个SpringBoot-web项目
注意Project SDK
、Java
的版本选择即可
2、导入相关依赖
<!-- swagger2 依赖 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- Swagger第三方ui依赖 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
3、编写一个Hello工程
@RestController
public class HelloController {
@GetMapping(value = "/hello")
public String hello(){
return "Hello";
}
}
4、集成Swagger
@Configuration
@EnableSwagger2//开启Swagger
public class SwaggerConfig {
}
去访问
http://localhost:8084/swagger-ui.html
5、配置Swagger
Swagger的bean实例Docket
//配置了Swagger信息=apiInfo
private ApiInfo apiInfo(){
//作者信息
Contact contact = new Contact("不写八个","http://localhost:8084/doc.html","wangliukun0306@163.com");
return new ApiInfo(
"【不写八个】的SwaggerAPI文档",
"即使再小的帆也能远航",
"v1.0",
"http://localhost:8084/doc.html",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
加入到实例中
6、Swagger配置扫描接口
//配置了Swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//控制是否开启swagger,false则swagger不能在浏览器中访问
//.enable(false)
.select()
//RequestHandlerSelectors.basePackage 配置要扫描的接口
//RequestHandlerSelectors.any() 扫描全部
//RequestHandlerSelectors.none() 不扫描
//RequestHandlerSelectors.withClassAnnotation() 扫描类上的注解
//RequestHandlerSelectors.withMethodAnnotation() 扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.wang.swagger.controller"))
//过滤的路径
//.paths(PathSelectors.ant("/wang/**"))
.build();
}
问题:我只希望swagger在生产环境中使用,在发布的时候不使用
7、配置swagger api文档分组
.groupName(“不写八个”)
配置多个分组
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("圆圆");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("程序员B");
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("程序员C");
}
4、 总结
- 我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
- 接口文档实时更新
- 可以在线测试
- Swagger是一个优秀的工具,几乎所有的大公司都有使用它
- 出于安全考虑,发布的时候,关闭Swagger
5、完整项目代码
链接:https://pan.baidu.com/s/191ri_lLzAULNywehbZioZA
提取码:3535