swagger介绍及使用

2023-11-08

Swagger-概述

Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger让部署管理和使用功能强大的API从未如此简单。

本篇将使用SpringBoot进行搭建Swagger

1. maven导入Swagger包

<dependencies>
        <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>
</dependencies>

2. 配置开启swagger2

新建一个配置类,然后开启使用@EnableSwagger2注解就可以了
注:在后续的操作中都是在swagger配置类中进行

@Configuration      /*配置类*/
@EnableSwagger2     /*开启swagger自动配置*/
public class swaggerConfig {

}

3. 测试swagger

在此之前可以编写一个测试的Controller,效果更佳显著

@Controller
public class swaggerController {

    @RequestMapping(path = "/hello")
    @ResponseBody
    public String hello(){
        return "hello swagger";
    }

}

启动项目进行访问swagger:http://localhost:8080/swagger-ui.html

能够看到此页面代表swagger基础配置就完成了,swagger页面分为4个内容

  1. swagger信息:相当于作者的个人信息(可自行修改)
  2. 接口信息:在controller中编写的接口全在里面(SpringBoot默认有个接口就是error)
  3. 开发者组:是一个下拉框,可以创建不同的开发者信息(比如某些业务的接口是01开发的,某些接口是02开发的)

在这里插入图片描述

4. 配置swagger信息

swagger信息:开发者名称、个人网站地址、邮箱地址、描述信息…(可以根据不同的Docket获取不同的ApiInfo中Contact的name属性来区别接口的开发者)

@Configuration       /*配置类*/
@EnableSwagger2     /*开启swagger自动配置*/
public class swaggerConfig {

    /*配置swagger的Docket实例*/
    @Bean
    public Docket getDocket( ){
            return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
    }

    /*配置swagger 信息==ApiInfo*/
    private ApiInfo apiInfo( ) {
        /*作者信息*/
        Contact contact = new Contact("阿波","https://libo2000.github.io/","973747397@qq.com");
        return new ApiInfo(
                "阿波的SwaggerAPI文档",
                "记忆之中没有辛苦,只有遗憾",
                "v1.0",
                "https://libo2000.github.io/",
                contact,
                "Apache2.0",
                "https://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>()
        );
    }

}

修改完之后再次访问:http://localhost:8080/swagger-ui.html 明显的看到swagger信息与之前发生了变化
在这里插入图片描述

5. 配置swagger扫描接口

 /*配置swagger的Docket实例*/
@Bean
public Docket getDocket(Environment environment){

     /*设置需要显示的swagger环境*/
     Profiles profiles =Profiles.of("dev","test");
      /**/
     boolean flag = environment.acceptsProfiles(profiles);

   return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .groupName("阿波") //swagger信息(ApiInfo)中的name成员变量(不同的开发者信息就需要设置多个ApiInfo在不同的Docket实例中获取)
        /*.enable(false):是否启用swagger  如果为false,浏览器中不能访问(默认为true)*/
        .enable(flag)
        .select()
        /*RequestHandlerSelectors:配置扫描接口的方式
               * basePackage:指定扫描的包
               * any:扫描全部
               * none:不扫描
               * withClassAnnotation:扫描类上的注解,参数为一个注解的反射对象
               * withMethodAnnotation:扫描方法上的注解*/
        .apis(RequestHandlerSelectors.basePackage("com.swagger.controller"))
        /*paths():过滤路径*/
//      .paths(PathSelectors.ant("/action"))
        .build();
 }

这里有个问题:这么才能控制swagger的显示问题,Docket实例中enable()默认为true就是说可以访问(false则不能访问),但是我想让swagger在测试阶段才可以访问,其他时候不能访问,如何实现?

方便我们测试所以创建多个SpringBoot的配置文件properties,在主配置文件中配置spring.profiles.active=具体配置环境(代表当前项目使用的是那一个项目环境)

  1. 设置需要显示的swagger环境(例如:只有在dev或者test环境下才显示):Profiles profiles =Profiles.of(“dev”,“test”);
  2. 判断当前环境是否为设置的环境(返回boolean值true或false):boolean flag = environment.acceptsProfiles(profiles);
  3. 将flag变量传到Docket实例的.enable(flag)属性中:enable(flag)

至此就可以通过获取当前环境而控制swagger的访问

在这里插入图片描述
在这里插入图片描述

6. swagger分组与接口注释

swagger分组:

在swagger配置时可分为不同的多个Docket对象,相当于每一个Docket对象就是一个项目中的开发者。可以设置多个ApiInfo信息,再通过Docket的groupName()参数为ApiInfo中Contact对象的name成员变量,在上面我们知道了Docket中可以设置扫描接口,那我们在通过扫描不同的接口、配置不同的ApiInfo信息,那么就可以进行swagger的分组(就可以在swagger中区别不同开发者写的接口及代码)

@Configuration           /*配置类*/
@EnableSwagger2     /*开启swagger自动配置*/
public class swaggerConfig {

    @Bean
    public Docket getDocket2(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("阿波2");
    }

    @Bean
    public Docket getDocket3(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("阿波3");
    }

    /*配置swagger的Docket实例*/
    @Bean
    public Docket getDocket(Environment environment){

        /*设置需要显示的swagger环境*/
        Profiles profiles =Profiles.of("dev","test");
        /**/
        boolean flag = environment.acceptsProfiles(profiles);

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("阿波") //swagger信息(ApiInfo)中的name成员变量(不同的开发者信息就需要设置多个ApiInfo在不同的Docket实例中获取)
                /*.enable(false):是否启用swagger  如果为false,浏览器中不能访问(默认为true)*/
                .enable(flag)
                .select()
                /*RequestHandlerSelectors:配置扫描接口的方式
                        * basePackage:指定扫描的包
                        * any:扫描全部
                        * none:不扫描
                        * withClassAnnotation:扫描类上的注解,参数为一个注解的反射对象
                        * withMethodAnnotation:扫描方法上的注解*/
                .apis(RequestHandlerSelectors.basePackage("com.swagger.controller"))
                /*paths():过滤路径*/
//                .paths(PathSelectors.ant("/action"))
                .build();
    }


    /*配置swagger 信息==ApiInfo*/
    private ApiInfo apiInfo() {
        /*作者信息*/
        Contact contact = new Contact("阿波","https://libo2000.github.io/","973747397@qq.com");
        return new ApiInfo(
                "阿波的SwaggerAPI文档",
                "记忆之中没有辛苦,只有遗憾",
                "v1.0",
                "https://libo2000.github.io/",
                contact,
                "Apache2.0",
                "https://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>()
        );
    }
    
}

在这里插入图片描述

swagger常用注解
在swagger如何去描述实体类呢?(JavaBean)

首先创建实体类,然后对实体类及成员变量通过注解进行描述:

@ApiModel("用户实体类")
public class User {

    @ApiModelProperty("用户名")
    public String username;
    
    @ApiModelProperty("密码")
    public String password;
    
}

然后在Controller中进行接口配置:

@RestController
public class swaggerController {

    @GetMapping(path = "/hello")
    public String hello(){
        return "hello swagger";
    }

    /*在接口中,返回值中存在实体类,他就会被扫描到swagger中*/
    @PostMapping(path = "/user")
    public User user(){
        return new User();
    }
    
 }   

在这里插入图片描述
对接口的描述:

    @ApiOperation("user控制类")
    @GetMapping(path = "/hello2")
    public String hello2(@ApiParam("用户名") String username, @ApiParam("密码")String password){
            return username+password;
    }

在这里插入图片描述

Swagger常用注解
在Java类中添加Swagger的注解即可生成Swagger接口,常用Swagger注解如下:

  1. @Api:修饰整个类,描述Controller的作用
  2. @ApiOperation:描述一个类的一个方法,或者说一个接口
  3. @ApiParam:单个参数描述
  4. @ApiModel:用对象来接收参数
  5. @ApiModelProperty:用对象接收参数时,描述对象的一个字段
  6. @ApiResponse:HTTP响应其中1个描述
  7. @ApiResponses:HTTP响应整体描述
  8. @ApiIgnore:使用该注解忽略这个API
  9. @ApiError:发生错误返回的信息
  10. @ApiImplicitParam:一个请求参数
  11. @ApiImplicitParams:多个请求参数
现在的我,未来的我,一起去啊,更远的地方!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

swagger介绍及使用 的相关文章

  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • Vue:通过 CSS 选择组件的最简洁方法是什么?

    我有一个bar成分 它的使用方式如下
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • 象棋对战js代码实现

    象棋对战js代码实现 思路 1 将棋盘设置为背景图片 对背景图片进行分割 分为9行10列的div块 每一块都是棋子的一个位置 2 对每一个div块设置onclick点击事件 每次点击div块都会调用判断棋子的走法是否合理的函数 pandua
  • Spark2.0特征提取、转换、选择之一:数据规范化,String-Index、离散-连续特征相互转换

    数据规范化 标准化 在数据预处理时 这两个术语可以互换使用 不考虑标准化在统计学中有特定的含义 下面所有的规范化操作都是针对一个特征向量 dataFrame中的一个colum 来操作的 首先举一个例子 MaxAbsScaler例子 参考后面
  • Unity基于C#事件委托机制

    事件委托是一种用于实现观察者模式的设计模式 它允许对象在发生特定事件时通知其他对象 在Unity中 事件委托机制为开发者提供了一种简单而有效的方式来处理游戏中的事件和交互 对啦 这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白
  • python算术运算符

    运算符 描述 实例 加 1 1 2 减 3 2 1 乘 2 3 6 除 4 2 2 取整除 返回除法的整数部分 商 9 2 4 取余数 返回除法的余数 9 2 1 幂 又称次方 乘方 2 3 8 算术运算符的优先级 运算符 描述 幂 最高优
  • 区块链的优缺点

    区块链的优点 一是难以篡改 更加安全 在传统信息系统的安全方案中 安全依赖于层层设防的访问控制 通过区块链技术 记录交易的数据库任何人都可以访问 但由于巧妙的设计并辅以密码学和共识机制 区块链的数据记录方式使得修改某一数据需要变更所有的后续
  • TypeError: cannot unpack non-iterable NoneType object

    python报错如下 TypeError cannot unpack non iterable NoneType object 解决方法 报错的原因是函数返回值得数量不一致 查看函数返回值数量和调用函数时接收返回值的数量是不是一致 修改一致
  • Java出现"此时不应有......."的错误

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 今晚在安装weblogic的时候 双击运行startWebLogic cmd dos窗口一闪而过 随后将 startWebLogic cmd 拖进cmd窗口运行 显示 此时
  • Android 不同版本通过mk拷贝并安装APK

    目录 前景 解决思路 注意事项 Android 11 Android 9 前景 工作中 有时APK通过系统编译的方式包进系统会丢失so库或者lib包 导致APK无法正常运行 但手动安装就不会出现这个问题 解决思路 可以使用一个取巧的方式解决
  • 无桥PFC的家族推演

    1 组合法构建无桥PFC PFC是一种AC DC变换器 将交流输入电压分成正负半周 输出电压是直流 因此AC DC变换器可以当做是两个DC DC变换器的组合 在PFC的拓扑推演中 就是设计两个DC DC变换器的工作模式 以下内容是基于对陈正
  • 遗传编程(GA,genetic programming)算法初探,以及用遗传编程自动生成符合题解的正则表达式的实践...

    1 遗传编程简介 0x1 什么是遗传编程算法 和传统机器学习算法有什么区别 传统上 我们接触的机器学习算法 都是被设计为解决某一个某一类问题的确定性算法 对于这些机器学习算法来说 唯一的灵活性体现在参数搜索空间上 向算法输入样本 算法借助不
  • i2c-core module could not be probed怎么解决啊

    求大佬帮忙看看 root PandoraBox A983 lib modules 3 14 79 uname a Linux PandoraBox A983 3 14 79 0 SMP Sat Sep 7 12 52 27 2019 arm
  • postman GET请求传Java实体,实体中又有对象实体数组

    controller代码接收参数如下 GetMapping getList ApiOperation 获取列表 public Object getList SearchListParam searchListParam return nul
  • 使用 Docker 运行简单的 python 程序

    以下是一个简单的 python 程序 用户输入一个最小值和最大值 输出二者之间的随机数 from random import randint min number int input Please enter the min number
  • 利用chatgpt实现三分钟快速制作自定义PPT

    目录 利用ChatGPT MindShow三分钟生成PPT 机器人 道合顺 莓用ai 百晓生 aichat 结合提词器以达到更好地提问效果 更好地提问ChatGPT 常用prompt表 小黄同学LL的博客 CSDN博客 举个栗子 利用Cha
  • 现代循环神经网络-门控循环单元(GRU)

    理论 门控隐状态 门控循环单元与普通的循环神经网络之间的关键区别在于 前者支持隐状态的门控 这意味着模型有专门的机制来确定应该何时更新隐状态 以及应该何时重置隐状态 这些机制是可学习的 并且能够解决了上面列出的问题 例如 如果第一个词元非常
  • stream().sorted 排序

    想用stream sorted 做双字段排序 list stream sorted Comparator comparing outObject gt outObject getinnerObject getAttribute revers
  • 责任链模式在项目中的引入使用

    责任链模式是一种设计模式 在责任链模式里 很多对象由每一个对象对其下家的引用而连接起来形成一条链 请求在这个链上传递 直到链上的某一个对象决定处理此请求 发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求 这使得系统可以在不影响客
  • mybatisPlus 枚举类注解 @EnumValue @JsonValue

    1 概要说明 创建枚举类 在需要存储数据库的属性上添加 EnumValue注解 在需要前端展示的属性上添加 JsonValue注解 2 示例实践 public enum SexEnum MAN 1 男 WOMAN 2 女 EnumValue
  • 使用FormData对象

    使用FormData对象 TABLE OF CONTENTS 创建一个FormData对象 使用HTML表单来初始化一个FormData对象 使用FormData对象发送文件 TAGS 文件 利用FormData对象 你可以使用一系列的键值
  • swagger介绍及使用

    文章目录 Swagger 概述 1 maven导入Swagger包 2 配置开启swagger2 3 测试swagger 4 配置swagger信息 5 配置swagger扫描接口 6 swagger分组与接口注释 Swagger 概述 S