一、Swagger简介
1.1 前后端分离时代
- 前后端分离
Vue+SpringBoot
后端时代:
- 前端只用管理静态页面;html属于后端负责,模板引擎JSP也归于后端的主力部分;
前后端分离时代:
- 后端:后端控制层,服务层,数据访问层【后端团队】;
- 前端:前端控制层,视图层【前端团队】
1)伪造后端数据,json。已经存在,不需后端,前端工程依旧可以跑起来。
- 前后端如何交互?API
- 前后端相对独立,松耦合;
- 前后端甚至可以部署在不同的服务器上;
1.2 存在问题
- 产生一个问题
- 前后端集成联调,前端人员和后端人员无法做到“及时协商,尽早解决”,最终导致问题集中爆发;
- 解决方案
- 制定schema(计划提纲),实时更新最新API,降低集成的风险;
- 早期制定word计划文档;
- 前后端分离:
1)前端测试后端接口:postman
2)后端提供接口,需实时更新最新的消息及改动!
1.3 Swagger
Swagger是世界上最流行的API框架!
- Restful Api文档在线自动生成工具,Api文档与Api定义同步更新;
- 直接运行,可以在线测试APi接口;
- 支持多种语言:(Java,PHP)
在项目中使用swagger需引入SpringBox:
- swagger2
- ui
二、SpringBoot集成Swagger
2.1 新建一个springboot项目
- 创建一个web项目
- 导入相关依赖
<!-- swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
- 创建HelloController工程
@RestController
public class HelloController {
@RequestMapping(value="/hello")
public String hello(){
return "hello";
}
}
- 配置Swagger-使用Config
@Configuration
@EnableSwagger2 //开启swagger2
public class SwaggerConfig {
}
- 测试
访问:http://localhost:8080/swagger-ui.htmlhttp://localhost:8080/swagger-ui.html
注意导入的swagger版本不要最新的,不然不会显示这个页面!
2.2 配置Swagger
@Configuration
@EnableSwagger2 //开启swagger2
public class SwaggerConfig {
//配置swagger的docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo());
}
//配置swagger信息=apiInfo
private ApiInfo apiInfo(){
//作者信息
Contact contact=new Contact(
"小陈", "https://www.csdn.net/", "1234244@qq.com");
return new ApiInfo(
"XiaoChen的SwaggerAPi文档",
"仰望星空,脚踏实地",
"v1.0",
"https://www.csdn.net/",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList()
);
}
}
2.3 Swagger配置扫描接口
- Docket.select( )
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(false) //是否启动swagger,若为false则不能在浏览器中访问
.select()
//RequestHandlerSelectors配置要扫描接口的方式
//basePackage:指定要扫描的包
// any(扫描全部),none(不扫描),
// withClassAnnotation(扫描类上的注解)
//withMethodAnnotation(扫描方法上的注解)
.apis(RequestHandlerSelectors
.basePackage("com.xsbc.swagger.controller"))
//paths() 过滤什么路径
.paths(PathSelectors.ant("/xsbc/**"))
.build();
}