从源码层面讲解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. JXJJOI2018_T2_tank

    题目描述 Lemon最近迷上了一款坦克对战游戏.在这款游戏中,Lemon需要驾驶一辆坦克与敌军对战. 坦克有很多不同的武器,每种武器有各自的特点,而Lemon所要做的就是合适地发射这些武器,对敌军造成 ...

  2. 添砖加瓦:[OpenCV]入门(一)

    1.OpenCV安装 (1)下载: 本文采用的是源码的方式进行安装,源码可以从OpenCV官网下载.这里以3.4.1为例. (2)安装 这里下载到的文件为3.4.1.zip."unzip 3 ...

  3. Hive Functions

    函数的分类 内置函数 操作符 复杂对象 UDF函数 数学函数 类型转换函数 日期函数 条件函数 UDTF函数 常用UDTF函数 explode posexplode inline stack json ...

  4. Bitstream or PCM?

    背景 提问 讨论精选 一 二 三 四 五 最后 电视上同轴输出的做法. 背景 USB通道下播放声音格式为AAC的视频文件,同轴输出设置为Auto,功放没有声音,设置成PCM,有声音. 提问 Auto/ ...

  5. Autowired和Resource区别

    @Autowired和@Resource熟悉吧?是不是经常复制粘贴顺手就来,两者都是用来给成员变量自动装载,可是它俩到底有啥区别呢? 1.@Autowired与@Resource都可以用来装配bean ...

  6. 万达乐园VS阿里帝国 谁将是未来娱乐产业的龙头?

    国内实体行业大佬王健林和互联网行业巨头马云,这次又不约而同地想到一块去了.从王健林叫板迪士尼大搞借势营销,到最近马云成立大文娱工作领导小组,明显的趋势表明娱乐越来越成为各界大佬们未来掘金的新战场.只不 ...

  7. C++走向远洋——49(项目一2、复数类中的运算符重载、类的友元函数)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  8. 树莓派3B安装OpenWrt打造超级路由器

    网上有很多树莓派安装OpenWrt的教程,我这里写一下个人安装体验以及踩过的坑

  9. PHP压缩文件夹 php

    $path = PUBLIC_DIR.'/images/'; //待压缩文件夹父目录 $zipPath = PUBLIC_DIR.'/images_zip/'; //压缩文件保存目录 !is_dir( ...

  10. Nuts.js01

    1.简介 Vue ssr框架.支持vue2,vue-router,vuex,vue server render, vue meta 2.基本使用: vue init nuxt-community/ko ...