SpringBoot集成Swagger(根据源码深入学习Swagger的用法)
从源码层面讲解Swagger的用法,快速了解掌握Swagger
简介
Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 Restful 风格的 Web 服务。 自动生成html文档。官网: https://swagger.io/
优势
- 支持 API 自动生成同步的在线文档 。API文档和API定义同步更新
- 提供 Web 页面在线测试 API ,不需要再下载postman使用
- 支持多种语言
使用步骤
导入依赖
<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>
主程序类上加上@EnableSwagger2注解
@SpringBootApplication
@EnableSwagger2
public class SwaggerApplication {
public static void main(String[] args) {
SpringApplication.run(SwaggerApplication.class, args);
}
}
访问API在线文档
http://localhost:8080/swagger-ui.html#/
为什么访问上面的页面,可能很多人存在疑问。一切都是根据源码来的。在Swagger-UI的包下
以上是Swagger的最简单用法,但是在API在线文档页面我们想修改一些配置,如分组信息,Swagger信息,需要配置Swagger
配置Swagger
Swagger 的Docket的bean实例
我们可以通过Swagger的源码理解上图中的Swagger信息部分是如何出来的,同时我们知道如何修改。
Docket对象
ApiInfo对象
配置Swagger的默认信息
private ApiInfo apiInfo() {
Contact contact = new Contact("小K", "https://github.com/kong0827", "1351882069@qq.com");
return new ApiInfo("小K的Swagger接口文档",
"每天学习一丢丢,每天进步一点点", // 描述
"1.0",
"https://github.com/kong0827",
contact, // 作者信息
"Apache 2.0",
"ttps://github.com/kong0827",
new ArrayList()
);
}
配置Swagger的Docket的bean实例
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("开发小组名称")
.select()
// 配置要扫描接口的方式
.apis(RequestHandlerSelectors.any())
// 过滤什么路径 过滤只含有kong下面的请求
// .paths(PathSelectors.ant("/kong/**"))
.build();
}
配置swagger是否启动
默认启动
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("开发小组名称")
.enable(true)
.select()
// 配置要扫描接口的方式
.apis(RequestHandlerSelectors.any())
// 过滤什么路径 过滤只含有kong下面的请求
.paths(PathSelectors.ant("/kong/**"))
.build();
}
问题:Swagger在生产环境使用,在发布的时候不使用
通过判断当前的环境
@Bean
public Docket docket(Environment environment) {
// 设置要显示的Swagger环境
Profiles profiles = Profiles.of("dev", "test");
// 通过Environment.acceptsProfiles 判断是否处在自己设定的环境中
boolean enable = environment.acceptsProfiles(profiles);return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("开发小组名称")
.enable(enable)
.select()
// 配置要扫描接口的方式
.apis(RequestHandlerSelectors.any())
// 过滤什么路径 过滤只含有kong下面的请求
.paths(PathSelectors.ant("/kong/**"))
.build();
}
采用属性注入
/**
* 设置是否显示接口文档
*/
@Value("${swagger.enable}")
private boolean enable;
SpringBoot集成Swagger(根据源码深入学习Swagger的用法)的更多相关文章
- MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法
返回目录 说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都 ...
- java 并发编程——Thread 源码重新学习
Java 并发编程系列文章 Java 并发基础——线程安全性 Java 并发编程——Callable+Future+FutureTask java 并发编程——Thread 源码重新学习 java并发 ...
- vnpy源码阅读学习(1):准备工作
vnpy源码阅读学习 目标 通过阅读vnpy,学习量化交易系统的一些设计思路和理念. 通过阅读vnpy学习python项目开发的一些技巧和范式 通过vnpy的设计,可以用python复现一个小型简单的 ...
- Java小白集合源码的学习系列:LinkedList
目录 LinkedList 源码学习 LinkedList继承体系 LinkedList核心源码 Deque相关操作 总结 LinkedList 源码学习 前文传送门:Java小白集合源码的学习系列: ...
- Java小白集合源码的学习系列:Vector
目录 Vector源码学习 Vector继承体系 Vector核心源码 基本属性 构造器 扩容机制 Enumeration 概述 源码描述 具体操作 Vector总结 Vector源码学习 前文传送门 ...
- SpringBoot的条件注解源码解析
SpringBoot的条件注解源码解析 @ConditionalOnBean.@ConditionalOnMissingBean 启动项目 会在ConfigurationClassBeanDefini ...
- Springboot 加载配置文件源码分析
Springboot 加载配置文件源码分析 本文的分析是基于springboot 2.2.0.RELEASE. 本篇文章的相关源码位置:https://github.com/wbo112/blogde ...
- 从SpringBoot启动,阅读源码设计
目录 一.背景说明 二.SpringBoot工程 三.应用上下文 四.资源加载 五.应用环境 六.Bean对象 七.Tomcat服务 八.事件模型 九.配置加载 十.数据库集成 十一.参考源码 服务启 ...
- spring源码:学习线索(li)
一.spring xml配置(不包括AOP,主要了解在初始化及实例化过程中spring配置文件中每项内容的具体实现过程,从根本上掌握spring) <bean>的名字 &,alia ...
随机推荐
- JSP9个内置对象和3个常用指令
一.9个内置对象: 1.request对象客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.2.response对象包含了响应客户请求的有关信息,但在JSP中很少 ...
- react-native start 启动错误解决方法
ERROR Error watching file for changes: EMFILE {"code":"EMFILE","errno" ...
- 一、HTTP和HTTPS的基本概念
1HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少. 2HT ...
- JAVA WEB基础巩固之Json、Ajax
一.Json(Json介绍)json校验工具 Json是JavaScript object notation的缩写,优点是易读易编写易于解析: 例如:Object: { "name" ...
- C++走向远洋——37(工资类,2)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:salarly.cpp * 作者:常轩 * 微信公众号:Worl ...
- LeetCode【面试题 16.17. 连续数列】
------------恢复内容开始------------ 题目描述 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5 ...
- [工具] Docker安装及portainer GUI
一.Docker Engine安装 1.安装流程 1)移除旧版本(如果有旧版本) yum remove docker \ docker-client \ docker-client-latest \ ...
- 前端笔记--css样式笔记
一.浮动 定位布局 1.浮动布局 left 元素向左浮动 right 元素向右浮动 例如:设置2个按钮,要使得按钮在同一行位置摆放,可以使用浮动,令按钮浮动到右边.注意,先设置float的按钮,例如: ...
- 在高德地图上用svg.js绘制简单图形
这段时间做的一个项目,需要在地图上绘制简单的图形.在学习高德地图JS API的过程中,发现高德地图提供的点.线等API并不能满足我的需求,还好它开放了自定义图层CustomLayer,官方说自定义图层 ...
- js监听离开或刷新页面时的弹窗提示
一.看图 二.使用场景. 填写表单时内容,当离开页面或者刷新的时候回丢失页面的内容,因此人性化的设计该有一个提示.所以这样的功能也就应用而生了. 三.思路. 1,页面内容改变.2,离开或刷新浏览器触发 ...