SpringBoot整合Springfox-Swagger2
SpringBoot整合Springfox-Swagger2
前言
不管Spring Boot整合还是SpringMVC整合Swagger都基本类似,重点就在于配置Swagger,它的精髓所在就在于配置。 @[toc]
1、Swagger简介
目前互联网时代前后端分离已成趋势,前后端混在一起,前端或者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发。解决方案就是前后端通过API进行交互达到相对独立且松耦合。Swagger就是这样的一个API框架,Swagger支持多种语言 如:Java,PHP等,它号称是世界上最流行的API框架!
2、整合前可能遇到的问题
1、 导入好依赖jar包之后,使用注解说找不到之类的问题,如遇到,请参考:所有Intellij IDEA Cannot Resolve Symbol XXX问题的解决方法汇总
2、 版本问题,SpringBoot的版本很多,被集成的框架版本也很多,可能版本高一点或者低一点就可能出现各种bug,这是集成其他框架的通病,这里得注意一下。如果运行出现一些什么bug,如果对SpringBoot底层原理不是很了解的可以先百度谷歌一下,找不到建议不妨换个SpringBoot的版本!
3、SpringBoot集成Swagger
注意:jdk 1.8以上才能运行swagger2
1、 导入两个jar包依赖
io.springfox
springfox-swagger2
2.9.2
io.springfox
springfox-swagger-ui
2.9.2
2、 要想使用Swagger,必须编写一个配置类来配置 Swagger,这里的配置类如下
@Configuration //说明这是一个配置类
@EnableSwagger2// 该注解开启Swagger2的自动配置
public class SwaggerConfig { //随便的一个类名
}
3、 这个时候已经算是初步整合完毕了,启动项目可访问http://localhost:8080/swagger-ui.html 可以看到swagger的界面,如下;
4、配置Swagger
不管是Spring Boot整合还是SpringMVC整合Swagger都基本类似,重点就在于配置Swagger,它的精髓所在就在于配置,这很关键。我们从下图来全局看看Swagger的四部分重点布局:
4.1、Swagger四部分布局
Swagger实例Bean是Docket,所以必须通过配置Docket实例来配置Swaggger。
第一部分--API分组:如果没有配置分组默认是default。通过Swagger实例Docket的groupName()方法即可配置分组 第二部分--基本描述:可以通过Swagger实例Docket的apiInfo()方法中的ApiInfo实例参数配置文档信息 第三部分--请求接口列表:在组范围内,只要被Swagger2扫描匹配到的请求都会在这里出现。 第四部分--实体列表:只要实体在请求接口的返回值上(即使是泛型),都能映射到实体项中!
第四部分注意:并不是因为@ApiModel注解让实体显示在Models列表里,而是只要出现在接口方法的返回值上的实体都会显示在这里,而@ApiModel和@ApiModelProperty这两个注解只是为实体添加注释的。前者为类添加注释,后者为类属性添加注释。
4.2、第二部分:API基本信息
先从第二部分开始分析,这样分析对理解第一部分比较有帮助。
@Configuration
@EnableSwagger2
@ComponentScan("com.yichun.swagger_boot_demo.controller")
public class SwaggerConfig {
@Bean public Docket docker(){ // 构造函数传入初始化规范,这是swagger2规范 return new Docket(DocumentationType.SWAGGER_2) //apiInfo: 添加api详情信息,参数为ApiInfo类型的参数,这个参数包含了第二部分的所有信息比如标题、描述、版本之类的,开发中一般都会自定义这些信息 .apiInfo(apiInfo()) .groupName("yichun123") //配置是否启用Swagger,如果是false,在浏览器将无法访问,默认是true .enable(true) .select() //apis: 添加过滤条件, .apis(RequestHandlerSelectors.basePackage("com.yichun.swagger_boot_demo.controller")) //paths: 这里是控制哪些路径的api会被显示出来,比如下方的参数就是除了/user以外的其它路径都会生成api文档 .paths((String a) -> !a.equals("/user")) .build(); } private ApiInfo apiInfo(){ Contact contact = new Contact("名字:name", "个人链接:http://xxx.xxx.com/", "邮箱:XXX"); return new ApiInfo( "标题内容", // 标题 "描述内容", // 描述 "版本内容:v1.0", // 版本 "链接:http://terms.service.url/", // 组织链接 contact, // 联系人信息 "许可:Apach 2.0 ", // 许可 "许可链接:XXX", // 许可连接 new ArrayList<>()// 扩展 ); }
}
1、分析
2、RequestHandlerSelectors过滤
点进RequestHandlerSelectors源码,分析如下:
4.3、第一部分:配置API分组
实际上,上面的内容就是一个完整的API组
1、配置一个分组 我们之前说过,如果没有配置分组默认是default。通过Swagger实例Docket的groupName()方法即可配置分组,代码如下:
@Bean
public Docket docket2(Environment environment) {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo()) // 配置基本API信息 .groupName("hello") // 配置分组 // 省略配置....
}
2、如何配置多个分组 很简单,配置多个分组只需要配置多个docket即可,代码如下:
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("组一") // 省略配置....
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("组二") // 省略配置....
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("组三") // 省略配置....
}
4.4、Swagger2的常用注解
讲第三部分和第四部分前,非常有必要先了解swagger2的常用注解,用注解的话,可以给一些比较难理解的属性或者接口,增加一些配置信息,让人更容易阅读!这点也是swagger2的重中之重!
首先我们得知道一点Swagger的所有注解定义在io.swagger.annotations包下。,这里只列出一些常用的注解,如下: 如果要详细了解这些注解可以参考swagger2 注解说明
4.5、第三部分:API请求列表
请求接口列表:在组范围内,只要被Swagger2扫描匹配到的请求都会在这里出现。使用注解能更好的提高阅读性。
4.6、第四部分:API实体列表
之前说过,只要实体在请求接口的返回值上(即使是泛型),都能映射到实体项中!是的,因此我们第一步是先有实体类。
1、 我们先随便创建一个实体类
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("性别") public String sex; @ApiModelProperty(value ="用户名",allowableValues = "11,12") public int name;
}
当然@ApiModelProperty注解里有很多属性,也会有许多坑,这里注意一下,本篇文章暂不概述。
2、 只要这个实体在请求接口的返回值上(包括泛型),都能映射到实体项中,所以我们编写代码如下:
@GetMapping("/User2")
public User getUser2(){
return new User();
}
效果如下: 本篇文章非常浅显,若有不正之处,欢迎批评指正,感激不尽!
欢迎各位关注我的公众号,里面有一些java学习资料和一大波java电子书籍,比如说周志明老师的深入java虚拟机、java编程思想、核心技术卷、大话设计模式、java并发编程实战.....都是java的圣经,不说了快上Tomcat车,咋们走!最主要的是一起探讨技术,向往技术,追求技术,说好了来了就是盆友喔...
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
当阿里面试官问我:Java创建线程有几种方式?我就知道问题没那么简单
当阿里面试官问我:Java创建线程有几种方式?我就知道问题没那么简单 这是最新的大厂面试系列,还原真实场景,提炼出知识点分享给大家。 点赞再看,养成习惯~ 微信搜索【武哥聊编程】,关注这个 Java 菜鸟。 昨天有个小伙伴去阿里面试实习生岗位,面试官问他了一个老生常谈的问题:你说一说 Java 创建线程都有哪些方式? 这哥们心中窃喜,这个老生常谈的问题早已背的滚瓜烂熟,于是很流利的说了出来。 Java 创建线程有两种方式: 继承Thread类,并重写run()方法实现Runnable接口,覆盖接口中的run()方法,并把Runnable接口的实现扔给Thread面试官:(拿出一张白纸)那你把这两种方式写一下吧! 小哥:(这有何难!)好~ public static void main(String[] args) { // 第一种 MyThread myThread = new MyThread(); myThread.start(); // 第二种 new Thread(() -> System.out.println("自己实现的run-2")).start(); } pub...
- 下一篇
Tron区块链PHP对接开发包【TronTool】
TronTool开发包适用于为PHP应用快速增加对Tron/USDT-TRC20数字资产的支持能力,即支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。TronTool官方下载地址:http://sc.hubwiz.com/codebag/tron-php-lib/。 1、开发包概述 TronTool开发包主要包含以下特性: 支持Tron区块链原生Trx交易 支持Tron智能合约以及TRC20代币,例如USDT-TRC20等 支持交易的离线签名,避免泄露私钥 完善的Tron节点API封装,支持全节点、Solidity节点和事件节点提供的API 支持使用自有节点或第三方节点,例如Tron官方提供的公共节点 TronTool软件包运行在Php 7.1+环境下,当前版本1.0.0,主要类/接口及关系如下图所示: TronTool的主要代码文件清单如下: 代码文件 说明 tron.php/src/TronKit.php Tron开发包入口类 tron.php/src/Trc20.php Tron TRC20智能合约封装类 tron.php/src/...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8编译安装MySQL8.0.19
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Mario游戏-低调大师作品
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果