从源码层面讲解Swagger的用法,快速了解掌握Swagger

简介

Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 Restful 风格的 Web 服务。 自动生成html文档。官网: https://swagger.io/

优势

  1. 支持 API 自动生成同步的在线文档 。API文档和API定义同步更新
  2. 提供 Web 页面在线测试 API ,不需要再下载postman使用
  3. 支持多种语言

使用步骤

导入依赖

  <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在生产环境使用,在发布的时候不使用

  1. 通过判断当前的环境

    @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();
    }
  2. 采用属性注入

    	/**
    * 设置是否显示接口文档
    */
    @Value("${swagger.enable}")
    private boolean enable;

SpringBoot集成Swagger(根据源码深入学习Swagger的用法)的更多相关文章

  1. MVVM架构~knockoutjs系列之从Knockout.Validation.js源码中学习它的用法

    返回目录 说在前 有时,我们在使用一个插件时,在网上即找不到它的相关API,这时,我们会很抓狂的,与其抓狂,还不如踏下心来,分析一下它的源码,事实上,对于JS这种开发语言来说,它开发的插件的使用方法都 ...

  2. java 并发编程——Thread 源码重新学习

    Java 并发编程系列文章 Java 并发基础——线程安全性 Java 并发编程——Callable+Future+FutureTask java 并发编程——Thread 源码重新学习 java并发 ...

  3. vnpy源码阅读学习(1):准备工作

    vnpy源码阅读学习 目标 通过阅读vnpy,学习量化交易系统的一些设计思路和理念. 通过阅读vnpy学习python项目开发的一些技巧和范式 通过vnpy的设计,可以用python复现一个小型简单的 ...

  4. Java小白集合源码的学习系列:LinkedList

    目录 LinkedList 源码学习 LinkedList继承体系 LinkedList核心源码 Deque相关操作 总结 LinkedList 源码学习 前文传送门:Java小白集合源码的学习系列: ...

  5. Java小白集合源码的学习系列:Vector

    目录 Vector源码学习 Vector继承体系 Vector核心源码 基本属性 构造器 扩容机制 Enumeration 概述 源码描述 具体操作 Vector总结 Vector源码学习 前文传送门 ...

  6. SpringBoot的条件注解源码解析

    SpringBoot的条件注解源码解析 @ConditionalOnBean.@ConditionalOnMissingBean 启动项目 会在ConfigurationClassBeanDefini ...

  7. Springboot 加载配置文件源码分析

    Springboot 加载配置文件源码分析 本文的分析是基于springboot 2.2.0.RELEASE. 本篇文章的相关源码位置:https://github.com/wbo112/blogde ...

  8. 从SpringBoot启动,阅读源码设计

    目录 一.背景说明 二.SpringBoot工程 三.应用上下文 四.资源加载 五.应用环境 六.Bean对象 七.Tomcat服务 八.事件模型 九.配置加载 十.数据库集成 十一.参考源码 服务启 ...

  9. spring源码:学习线索(li)

    一.spring xml配置(不包括AOP,主要了解在初始化及实例化过程中spring配置文件中每项内容的具体实现过程,从根本上掌握spring) <bean>的名字 &,alia ...

随机推荐

  1. JavaScript对象的几种创建方式与优缺点

    JavaScript中常见的几种创建对象的方式有:Object构造函数模式.对象字面量模式.工厂模式.自定义构造函数模式.构造函数加原型组合模式:他们各自有各自的优缺点和使用场景. 1. Object ...

  2. App自动化测试方案

    App自动化测试方案 1.1  概述 什么是App自动化?为什么要做App自动化? App自动化是指给 Android或iOS上的软件应用程序做的自动化测试. 手工测试和自动化测试的对比如下: 手工测 ...

  3. stat()函数--------------获取文件信息

    stat():用于获取文件的状态信息,使用时需要包含<sys/stat.h>头文件. 函数原型:int stat(const char *path, struct stat *buf): ...

  4. sycCMS PHP V1.0---呵呵呵呵呵

    闲的无聊,随便找了份代码看了看. //search.php 第17行 第49行 ...... $keyword=SafeRequest("keyword","post&q ...

  5. 苹果为何要一定要去印度生产iPhone

    ​ 现在,关于苹果手机有几种流行的猜想和期待,今年恰逢iPhone问世十周年,新产品估计会有颠覆性创新,消费者正望穿秋水,翘首企盼,但只需待到金秋便可知晓,何况iPhone8或许也就是一小撮发烧友的选 ...

  6. vector 循环里删除多个元素

    ; i < (int)vecLines.size(); i++) { AcDbLine * l1 = vecLines[i]; if (l1 == NULL) { continue; } //记 ...

  7. localstorage二次封装-模块模式

    var db = function () { // 本地存储前缀,减少命名冲突 var prefix = 'ydb'; return { setPrefix: function (_prefix) { ...

  8. 网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS)

    目录 网络流媒体协议的联系与区别(RTP RTCP RTSP RTMP HLS) 简结 RTP RTCP RTSP 区别与联系 RTSP.RTMP.HLS 区别与联系 关于直播 流媒体各协议层次图 基 ...

  9. JZOJ 5329. 【NOIP2017提高A组模拟8.22】时间机器

    5329. [NOIP2017提高A组模拟8.22]时间机器 (File IO): input:machine.in output:machine.out Time Limits: 2000 ms M ...

  10. 必备技能六、Vue框架引入JS库的正确姿势

    在Vue.js应用中,可能需要引入Lodash,Moment,Axios,Async等非常好用的JavaScript库.当项目变得复杂庞大,通常会将代码进行模块化拆分.可能还需要跑在不同的环境下,比如 ...