1.学习目标
- 了解Swagger的作用
- 巩固前后端分离
- 在springBoot中集成Swagger
2.为什么有Swagger
1.前后端分离
- 当前最主流的前后端分离的技术栈:Vue+SpringBoot
- 后端时代:前端只用管理和开发静态页面,并将开发好的页面交给后端,后端通过模板引擎JSP重构视图页面(加一些EL表达式等),此时后端是整个开发的主力
- 前后端分离时代
- 后端实现:后端控制层、服务处、数据访问层【后端团队】
- 前端实现:前端控制层、视图层【前端团队】
- 伪造后端数据,就是在前端项目中使用JSON格式存储一些不变的数据,然后在项目运行的时候读取JSON数据即可,所以此时前端工程不需要后端提供的数据,也可以运行起来查看最终的效果
- 前后端怎么进行交互?==?数据API接口(这个接口不是说的我们Java里面的那个接口,而是数据接口,就是我们后端写的controller,前端视图将访问链接对应的绑定到controller中的具体方法上,用户点击前端页面上对应的请求链接,请求就会传入controller中对应的方法,该方法调用service层获取数据,再将数据返回,视图解析器拿到视图+后端返回的数据并将数据渲染上去返回给用户,整个流程结束;当然为了前端可以正确解析后端返回的数据,前后端需要商量数据的格式,只有二者遵守相同的数据格式,数据才能正确的渲染)
- 前后端分离的好处:前后端相对独立,实现了前后端松耦合(接口实现),前后端甚至可以部署在不同的服务器上,只要前端可以调用到 后端提供的数据接口,是不是部署在一台服务器上没有多大的关系
- 前后端分离的问题
- 前后端集成联调问题:前端和后端人员不能及时协商,因为前后端对于某一个数据的CRUD的操作步骤很不一样,前端需要增加一个字段,只需要去页面上写一个即可;但是后端需要从数据库、dao/mapper、service、controller和POJO全部修改一遍,并且一次修改可能涉及多个字段,并且修改之后可能推翻原来的修改又改回去,这就让后端人员很恼火了;
- 这就导致了问题的爆发,问题出现,工程就要延期,工程延期公司就会亏损
- 解决方案
- 首先制定一个schema(计划/纲要/架构),实时更新最新的数据API,降低集成风险
- 早期:制定word计划文档,但是每次都要下载文件,人多了效果很不好
- 后来出现了一些工具,比如postman,专门用于测试后端数据接口是否能够正常使用,因为前端需要在确定你的数据接口可以正常使用之后再去将自己的视图模板上的数据模板改成后端提供的数据API;如果前端拿到后端数据之后直接就改了前端视图模板,如果后端数据不能正常请求,那么自己的前端项目也就不能进行正常的测试了,只能等着后端将数据接口修复,前端才能继续自己的工作,继续扩展前端业务,这样显然不满足需求,所以就出现了postman,它可以直接去测试后端数据接口能不能正常的获取到前端想要的数据
- 现在的解决办法:使用swagger,swagger的好处在于它能实时的向前端展示后端提供了哪些数据接口,并且支持数据接口的测试,不用再去下载例如postman这样的第三方软件进行单独的数据接口测试
3.什么是Swagger
- 号称世界上最流行的API框架,它会实时更新API文档
- RestFul风格的API,文档在线自动生成工具 => API文档与API定义同步更新(就是后端数据接口/API一旦写完,API文档就实时更新了)
- 直接运行,并支持在线测试API/数据接口
- 支持多种语言 (如:Java,PHP等)
- 官网
4.在项目中使用Swagger
- 导入依赖Springfox Swagger2+Springfox Swagger UI

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>3.0.0</version> </dependency> <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>3.0.0</version> </dependency>
1.SpringBoot集成Swagger
- 创建新的springBoot项目:swagger-demo

- 导入一个web依赖即可
- 导入swagger的依赖
- 编写一个hello工程(就是创建一个controller,写一个返回hello字符串的方法,来测试项目环境是否搭建成功)
package com.thhh.swagger.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @RequestMapping("hello") public String hello(){ return "Hello Swagger"; } } - 测试

- 配置swagger,配置之后才能使用,因为我们可以观察导入的两个依赖的名称Springfox Swagger2+Springfox Swagger UI,没有一个和springBoot启动器相关,所以springBoot不会帮我们进行自动配置,所以我们需要自己配置之后才能使用
- 在springBoot中,要新增spring容器中可以使用的依赖,需要使用javaconfig,所以我们应该去创建一个SwaggerConfig
package com.thhh.swagger.config; import org.springframework.context.annotation.Configuration; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 //开启Swagger2 public class SwaggerConfig { } - 创建的SwaggerConfig只需要写上上面两个注解,就可以测试运行了,之所以写上@EnableSwagger2就可以使用swagger的原因就是它本身就有默认的配置,所以开启之后就可以直接使用
- 测试运行,访问localhost:8080/swagger-ui.html

- 原因:引入的jar包太新了,是swagger2 3.0.0,这个版本的依赖有了很多的改动,我们可以先学老版本,然后再学习新版本,这样就会有很好的兼容性,如果想直接看swagger2 3.0.0的使用,参考博客SpringBoot2整合Swagger2最新版本3.0.0 构建前后端分离API接口文档
- 我这里先学习swagger老版本用法,所以对于导入的依赖做降级处理,两个依赖都降级为2.9.2,这个版本使用的人最多(这里就先不使用新版本的了?,毕竟需要先入门,后面新版本改动比较大,公司使用的必然不多,所以还是只有迎合市场的需求去使用当前使用最多的一个版本)
- 重启项目测试

- 这个页面就可以实时查看我们项目中的数据API接口
- 页面结构

版权声明:本文为Jzandth原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。