Swagger
学习目标:
- 了解Swagger的作用即概念
- 了解前后端分离
- 在SpringBoot中集成Swagger
Swagger简介
前后端分离
Vue + SpringBoot
后端时代:前端只用管理静态页面;html==>后端。模板引擎 JSP=>后端是主力
前后端分离时代:
- 后端:后端控制层,服务层,数据访问层【后端团队】
- 前端:前端控制层,视图层【前端团队】
- 伪造后端数据,json。已经不需要后端,前端工程已经能实现了
- 前后端如何交互===> API
- 前后端相对独立。松耦合
- 前后端甚至可以部署在不同的服务器上
产生一个问题:
- 前后端集成联调,前端人员和后端人员无法做到“及时协商,尽早解决”,最终导致问题集中爆发
解决方案:
- 首先指定[schema]计划提纲,实时更新最新API,降低集成的风险
- 早些年:制定word计划文档
- 前后端分离:
- 前端测试后端接口:postman
- 后端提供接口,需要实时更新的消息及改动
Swagger
- 号称世界上最流行的API框架
- RestFul API 文档在线自动生成工具=>API文档与API定义同步更新
- 直接运行,可以在线测试API接口
- 支持多种语言:(JAVA,PHP)
在项目中使用Swagger导入springbox;
- swagger2
- ui
SpringBoot集成Swagger
-
新建一个SpringBoot项目
-
导入相关依赖
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency>
-
编写一个Hello工程
-
配置Swagger==>Config
注意:
- SpringBoot 2.6.x配置swagger会报错,要将SpringBoot回退至2.5.6版本
- Swagger ui版本需要2.9.2
@Configuration @EnableSwagger2 public class SwaggerConfig { //配置了Swagger的Docket的bean实例 @Bean public Docket docket(Environment environment){ //设置要显示的Swagger环境(spring环境(生产)(正式)···) Profiles profiles = Profiles.of("dev","test"); //获得项目环境 boolean evm = environment.acceptsProfiles(profiles); return new Docket(DocumentationType.SWAGGER_2) //设置swagger信息 .apiInfo(apiInfo()) //分组(多个分组注册多个bean) .groupName("BetterAb") //是否启动swagger .enable(evm) .select() //扫描api .apis(RequestHandlerSelectors.basePackage("com.betterab.swg_demo.controller")) //过滤路径(扫描所有请求路径) .paths(PathSelectors.ant("/**")) .build(); }
-
测试运行
http://localhost:8080/swagger-ui.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MxMJuOWo-1652711313789)(C:\Users\70402\Desktop\笔记md\res\png\Snipaste_2022-01-25_18-22-28.png)]
Swagger扫描接口
Swagger扫描controller接口中有实体类就会
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("用户姓名")
private String username;
@ApiModelProperty("用户密码")
private String password;
}