目录

  • 一、学习目标
  • 二、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. 【直播】陈安东,但扬:CNN模型搭建、训练以及LSTM模型思路详解
  2. ET.parse 中文
  3. 暮色森林模组_我的世界暮色森林mod全攻略,尤其是Boss击杀顺序,一定要牢记...
  4. Python中List的复制(直接复制、浅拷贝、深拷贝)
  5. maven搭建多模块项目和管理
  6. Azkaban WebApi 调用
  7. JEECG J2EE敏捷开发框架(代码一键生成)
  8. PHP 读取 QQ ip纯真数据库 详解
  9. DB2存储过程中的ATOMIC关键字
  10. paste linux 相同字符,Linux命令之字符串处理命令paste命令使用实例
  11. wpf datagrid 计算两个列的差值_天体到达指定方位角的时间计算
  12. 谈谈我对-大学-游戏-追名逐利-等10个话题的一些简要看法
  13. 谷歌Apps vs.微软Office
  14. loadrunner 一个诡异问题
  15. 幅频特性曲线protues_短学期--功率放大器电路图设计及Proteus仿真
  16. chrome浏览器添加crx插件
  17. PostgreSQL 30天 培训视频(SQL基础,备份恢复,HA,服务端编程,大数据,内核,应用案例)
  18. php滑动teb效果,PEB和TEB资料整合
  19. vue-cli 实现反向代理获取猫眼数据
  20. mysql删除列前判断_MySQL中,删除列的SQL语句是( )

热门文章

  1. 神州数码融信2019面试题
  2. 今日诗句第一期:路人攀折半成荒,何似山中自在芳 --严粲(折半查找)
  3. 《妈妈再也不用担心我的学习系列》之RabbitMQ动态修改队列名
  4. 培养兴趣可以学丙烯画吗?学丙烯画有什么要求?
  5. 07年奋战长春亚冬会,08期待再战北京奥运会
  6. 基于CNN的HDR重建(二 单帧的)
  7. android群组功能,Android附近分享功能或很快支持群组传输
  8. C# 多线程入门系列(三)
  9. C++字符串复制函数
  10. 云效代码安全揭秘,全方位为代码安全保驾护航