目录

  • 一、学习目标
  • 二、Swagger简介
  • 三、SpringBoot集成Swagger
  • 四、案例
  • 五、配置Swagger
  • 六、配置扫描接口
  • 七、配置Swagger开关
  • 八、配置API分组
  • 九、实体配置
  • 十、扩展:网页皮肤

一、学习目标

  • 了解Swagger的概念及作用
  • 掌握在项目中集成Swagger自动生成API文档

二、Swagger简介

前后端分离

  • 前端 > 前端控制器、视图层
  • 后端 > 后端控制器、服务层、数据访问层
  • 前后端通过API进行交互
  • 前后端相对独立且松耦合

产生的问题

  • 前后端集成,前端后者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发

解决方案

  • 首先定义schema[计划的提纲],并实时跟踪最新的API,降低集成风险

Swagger

  • 世界上最流行的API框架
  • Resultful Api 文档在线自动生成器 => API文档与API定义同步更新
  • 直接运行,在线测试API
  • 支持多种语言(如:Java,PHP等)

三、SpringBoot集成Swagger

Springboot集成Swagger => Springfox,两个jar包

  • Springfox-swagger2
  • swagger-springmvc

使用Swagger

  • 要求:jdk1.8以上,否则swagger2无法运行

四、案例

  1. 新建一个SpringBoot项目(选择web模块即可)
  2. 添加maven依赖
 <!-- swagger依赖 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency>
  1. 编写HelloController,测试确保运行成功!
/*** @author hyz* @create 2020-06-06 14:36*/
@RestController
public class HelloController {@GetMapping("/hello")public String hello(){return "hello";}
}
  1. 编写Swagger配置类(SwaagerConfig)
/*** @author hyz* @create 2020-06-06 14:41* swagger配置类*/
@Configuration
//开启swagger2
@EnableSwagger2
public class SwaggerConfig {}
  1. 访问测试:http://localhost:8080/swagger-ui.html,即可看到Swagger的界面

    该界面主要分为四块区域,如下图所示:

五、配置Swagger

  1. Swagger实例Bean是Docket,所以通过配置Docket实例来配置Swagger
  //配置Swagger的Docket的Bean实例@Beanpublic Docket docker(Environment environment){return new Docket(DocumentationType.SWAGGER_2);}
  1. 通过apiInfo()来属性配置文档信息
  @Beanpublic Docket docker(Environment environment){return new Docket(DocumentationType.SWAGGER_2);}//配置Swagger信息 = apiInfopublic ApiInfo apiInfo(){//作者信息Contact contact = new Contact("韩雨泽","http://www.hanyuze.top/","xxx@163.com");return new ApiInfo("韩雨泽的SwaggerAPI文档", //标题"帅气的小伙子", //描述"v1.0", //版本"http://www.hanyuze.top/", //组织链接contact, //联系人信息"Apache 2.0", //许可"http://www.apache.org/licenses/LICENSE-2.0", //许可链接new ArrayList()); //扩展}
  1. Docket实例关联上apiInfo()
 @Beanpublic Docket docker(Environment environment){return new Docket(DocumentationType.SWAGGER_2).apiInfo();}//配置Swagger信息 = apiInfopublic ApiInfo apiInfo(){//作者信息//Contact contact = new Contact("联系人名字","联系人访问链接","联系人邮箱");Contact contact = new Contact("韩雨泽","http://www.hanyuze.top/","xxx@163.com");return new ApiInfo("韩雨泽的SwaggerAPI文档", //标题"帅气的小伙子", //描述"v1.0", //版本"http://www.hanyuze.top/", //组织链接contact, //联系人信息"Apache 2.0", //许可"http://www.apache.org/licenses/LICENSE-2.0", //许可链接new ArrayList()); //扩展}
  1. 重启项目,访问测试 http://localhost:8080/swagger-ui.html

六、配置扫描接口

  1. 构建Docket时通过select()方法配置怎么扫描接口
 @Beanpublic Docket docker(Environment environment){return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("韩雨泽")//通过select()方法,配置扫描接口,RequestHandlerSelectors配置如何扫描接口.select()//RequestHandlerSelectors 配置要扫描接口的方式//basePackage 根据包路径扫描接口//any():扫描全部,项目中所有接口都会被扫描到//none():不扫描接口//withClassAnnotation: 扫描类上的注解,参数是一个注解的反射对象//withMethodAnnotation: 扫描方法的注解,参数是一个注解的反射对象.apis(RequestHandlerSelectors.basePackage("cn.hyz.swagger.controller")).build();}
  1. 重启项目测试,由于我们配置根据包的路径扫描接口,所以我们只能看到一个类
  2. 还可以配置接口扫描过滤
 @Beanpublic Docket docker(Environment environment){return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())//通过select()方法,配置扫描接口,RequestHandlerSelectors配置如何扫描接口.select().groupName("韩雨泽")//RequestHandlerSelectors 配置要扫描接口的方式//basePackage 根据包路径扫描接口//any():扫描全部,项目中所有接口都会被扫描到//none():不扫描接口//withClassAnnotation: 扫描类上的注解,参数是一个注解的反射对象//withMethodAnnotation: 扫描方法的注解,参数是一个注解的反射对象.apis(RequestHandlerSelectors.basePackage("cn.hyz.swagger.controller"))//过滤路径,例如这里只扫描请求以/admin开头的接口//any():任何接请求都扫描//none():任何请求都不扫描//regex():通过正则表达式控制//ant():通过ant()控制.paths(PathSelectors.ant("/admin/**")).build();}

七、配置Swagger开关

  1. 通过enable()方法配置是否启用Swagger,如果是false,Swagger将不能在浏览器访问了
 @Beanpublic Docket docker(Environment environment){return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("韩雨泽")//是否启用Swagger,如果为false,则不能在浏览器访问.enable(false)//通过select()方法,配置扫描接口,RequestHandlerSelectors配置如何扫描接口.select()//RequestHandlerSelectors 配置要扫描接口的方式//basePackage 根据包路径扫描接口//any():扫描全部,项目中所有接口都会被扫描到//none():不扫描接口//withClassAnnotation: 扫描类上的注解,参数是一个注解的反射对象//withMethodAnnotation: 扫描方法的注解,参数是一个注解的反射对象.apis(RequestHandlerSelectors.basePackage("cn.hyz.swagger.controller"))//过滤路径,例如这里只扫描请求以/admin开头的接口//any():任何接请求都扫描//none():任何请求都不扫描//regex():通过正则表达式控制//ant():通过ant()控制.paths(PathSelectors.ant("/admin/**")).build();}
  1. 如何动态配置当项目处于开发环境(dev)环境时显示,生产环境(pro)不显示?
    //配置Swagger的Docket的Bean实例@Beanpublic Docket docker(Environment environment){//设置要显示的Swagger环境Profiles profiles = Profiles.of("dev","pro");//通过environment.acceptsProfiles判断是否处在自己设定的环境当中boolean flag = environment.acceptsProfiles(profiles);return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("韩雨泽")//是否启用Swagger,如果为false,则不能在浏览器访问.enable(flag)//通过select()方法,配置扫描接口,RequestHandlerSelectors配置如何扫描接口.select()//RequestHandlerSelectors 配置要扫描接口的方式//basePackage 根据包路径扫描接口 //any():扫描全部,项目中所有接口都会被扫描到//none():不扫描接口//withClassAnnotation: 扫描类上的注解,参数是一个注解的反射对象//withMethodAnnotation: 扫描方法的注解,参数是一个注解的反射对象.apis(RequestHandlerSelectors.basePackage("cn.hyz.swagger.controller"))//过滤路径,例如这里只扫描请求以/admin开头的接口//any():任何接请求都扫描//none():任何请求都不扫描//regex():通过正则表达式控制//ant():通过ant()控制
//                .paths(PathSelectors.ant("/admin/**")).build();}

八、配置API分组

  1. 如果没有配置分组,默认是default。通过groupName()方法即可配置分组
    //配置Swagger的Docket的Bean实例@Beanpublic Docket docker(Environment environment){return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("韩雨泽") //配置分组//省略配置.......build();}
  1. 重启项目查看分组
  2. 如何配置多个分组?
    配置多个分组只需要配置多个Docket即可
 //配置Swagger的Docket的Bean实例@Beanpublic Docket docker(Environment environment){return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("1") //配置分组//省略配置.......build();}//配置Swagger的Docket的Bean实例@Beanpublic Docket docker(Environment environment){return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("2") //配置分组//省略配置.......build();}//配置Swagger的Docket的Bean实例@Beanpublic Docket docker(Environment environment){return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("3") //配置分组//省略配置.......build();}

4.重启项目查看即可

九、实体配置

  1. 新建一个实体类
/*** @author hyz* @create 2020-06-06 16:00*/
@ApiModel("用户实体类")
public class User {@ApiModelProperty("用户名")private String username;@ApiModelProperty("密码")private String password;
}

2.只要这个实体在请求接口的返回值上(即使是泛型),都能映射到实体项中

@GetMapping("/user")
public User getUser(){return new User();
}

3.重启项目查看

注意:
并不是因为@ApiModel这个注解让实体显示在这里了,而是只要出现在接口方法的返回值上的实体都会显示在这里,而@ApiModel@AapiModelProperty这两个注解是为实体添加注释的。

  • @ApiModel: 为实体类添加注释
  • @AapiModelProperty: 为实体类属性添加注释

更多注解请查看官网手册

十、扩展:网页皮肤

我们可以导入不同的包实现不同的皮肤定义:
1.默认的(访问http://localhost:8080/swagger-ui.html)

 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency>

2.bootstrap-ui(访问http://localhost:8080/doc.html)

 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.1</version></dependency>

3.Layui-ui(访问http://localhost:8080/docs.html)

 <dependency><groupId>com.github.caspar-chen</groupId><artifactId>swagger-ui-lalyer</artifactId><version>1.1.3</version></dependency>

4.mg-ui(访问http://localhost:8080/document.html)

 <dependency><groupId>com.zyplayer</groupId><artifactId>swagger-mg-ui</artifactId><version>1.0.6</version></dependency>

Spirng Boot-Swagger相关推荐

  1. java+swagger+侵入_Spring boot+Swagger配置无侵入式Restful接口(一)

    最近一直遇到有人问我spring boot +swagger怎么配置无侵入式的restful接口,这段时间一直很忙,没有时间,刚好星期六,趁着休息时间给大家写个demo,在这里我就粘贴一些步骤,具体的 ...

  2. Spring Boot + Swagger

    http://springfox.github.io/springfox/docs/current/#customizing-the-swagger-endpoints 一.什么是Swagger? S ...

  3. Spring Boot swagger之前后端分离

    前后端分离详解 现在的趋势发展,需要把前后端开发和部署做到真正的分离做前端的谁也不想用Maven或者Gradle作为构建工具做后端的谁也不想要用Grunt或者Gulp作为构建工具 前后端需要通过接口来 ...

  4. java+swagger+侵入_Spring boot+Swagger配置无侵入式Restful接口(二)

    maven依赖自动配置 额,看了前面第一种配置方式,是不是感觉有点麻烦呢?我也觉得,到时候去掉的时候,还需要进行删除配置啊,一大堆,还有可能到时候根本不知道. 所以,我决定自己写个让它自己就可以完成配 ...

  5. spring boot 集成springfox,使用swagger对 API 接口进行测试管理的 demo 示例

    1. 描述 一个springboot项目集成 springfox 3.0,使用swagger对 API 接口进行测试管理的 demo示例. 环境: IDE(idea):2021.3 JDK:1.8 m ...

  6. Spring Boot和Swagger UI

    我已经一年没有从头开始开发Spring Web应用程序了,如果我不参加QA自动化工程师的培训,那么这段时间甚至会更长. 由于这个原因,我开发了一个示例REST应用程序. 除了Swagger,一切对我来 ...

  7. mysqls压力测试怎么用_用 Swagger 测试接口,怎么在请求头中携带 Token?

    松哥周末抽空给 Spring Security 系列也录制了一套视频,目录如下: 感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程 今天的话题来自一个小伙伴在微信上的提问 ...

  8. Spring Boot笔记

    1.什么是SpringBoot 1.简介 就是一个javaweb的开发框架 以前Spring的配置太多,太麻烦,为了提高开发效率,于是开始提倡"约定大于配置",进而衍生出一些一站式 ...

  9. Spring Boot

    1.Spring Boot 1.回顾什么是Spring Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson . Spring是为了解决企业级应用 ...

  10. spring boot快速入门

    1.什么是SpringBoot 一个javaweb的开发框架,和SpringMVC类似,对比其他javaweb框架的好处,官方说是简化开发,约定大于配置, you can "just run ...

最新文章

  1. 详解exif.js,应用于canvas照片倒转(海报H5)
  2. 如何将.sof转换成.jic
  3. C语言中关于字符数组输入,scanf没执行
  4. php open gl,Open GL 资料 01
  5. linux之git入门命令
  6. sina微博登录框和twitter的比较
  7. JM8.6之erc_api.c文件初探
  8. 机房智能直冷优化应用技术
  9. 视频教程-Excel函数教程(下)-Office/WPS
  10. c 语言ifelse语句例子,C if else 语句
  11. Android15_ListView分页
  12. ASP.NET 抓取网页源文件
  13. 《纸短情长》世间最美的情书♡摘录
  14. 猿创征文 |【算法入门必刷】数据结构-栈(四)
  15. C#程序设计--任何一个自然数m的立方均可写成m个连续奇数之和
  16. PIPE接口基本描述
  17. 【ccf2021训练赛】图书推荐算法赛道(SASRec序列推荐模型 | 序列推荐模型分类)
  18. Python函数——Numpy size()
  19. li-poly_GitHub - kinglisky/lowpoly: low poly图片风格化工具
  20. 微信小程序生成清晰海报并保存到本地

热门文章

  1. .eslintrc.json配置及规则说明
  2. 华为薪资等级结构表_2020年华为工资等级对照表
  3. android在自带的app中,调用手机自带的百度地图和高德地图去实现导航的功能
  4. ssl加速网关_SSL加速
  5. MB1C MIGO入库时【不可能为条目A999 GBB CN01 BSA 7920确立帐户】解决方案
  6. 2019 某某最新《 Javascript之Node.JS经典教程 Node.js从理论到实战》
  7. 想学单片机怎么入手?51单片机入门自学最佳指南
  8. Ubuntu系统man命令中文汉化
  9. c语言怎么判断素数return1,C语言实验——判断素数(循环结构)
  10. 大学英语四级考试题型结构