• 想完全掌握Swagger,这一篇就够了!


    一、Swagger基础

    swagger:
           号称世界上最流行的Api框架
           RestFul Api文档在线自动生成工具=>Api文档与Api定义同步更新
           直接运行,可以在线测试Api接口
           支持多种语言,java php

    二、SpringBoot集成swagger

    1、新建一个spring项目

    在这里插入图片描述
    在这里插入图片描述
    2、修改maven仓库
    在这里插入图片描述
    3、导入依赖

    
    
        io.springfox
        springfox-swagger2
        2.9.2
    
    
    
    
        io.springfox
        springfox-swagger-ui
        2.9.2
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    4、编写一个Hello工程

    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author potential
     */
    @RestController
    public class HelloController {
    
        /**
         *  每个项目都会有一个默认的请求 /error
         */
        @RequestMapping(value="/hello")
        public String hello(){
            return "hello";
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述
    5、配置swagger
    在这里插入图片描述
    创建SwaggerConfig类,添加如下内容

    package com.kuang.swagger.config;
    
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    
    /**
     *SwaggerConfig 一定是要配置到springboot里面
     * 所以需要添加@Configuration注解
     * @author potential
     */
    @Configuration
    @EnableSwagger2 //开启swagger2
    public class SwaggerConfig {
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    6、测试

    启动,主启动类,进入http://localhost:8080/swagger-ui.html,查看swagger的web界面,呈现下面页面,即表示集成成功。
    在这里插入图片描述

    三、配置Swagger信息

    Swagger的bean实例Docket:
           在SwaggerConfig类中,添加如下内容,表示已经将Swagger的bean实例Docket实例化

    /**
         * 配置swagger的Docket的Bean实例
         */
        @Bean
        public Docket docket(){
            return new Docket(DocumentationType.SWAGGER_2);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    3.1 配置Swagger信息的ApiInfo

    1、在SwaggerConfig类中,添加如下内容,设置ApiInfo信息,并且将其在实例化的Docket中调用

      /**
     *SwaggerConfig 一定是要配置到springboot里面
     * 所以需要添加@Configuration注解
     * @author potential
     */
    @Configuration
    @EnableSwagger2 //开启swagger2
    public class SwaggerConfig {
        /**
         * 配置swagger的Docket的Bean实例
         */
        @Bean
        public Docket docket(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo());
    
    
        }
        /**
         * 配置Swagger信息的apiInfo
         */
        private ApiInfo apiInfo(){
            //作者信息
            Contact contact = new Contact("李","https://blog.csdn.net/wangzhihao1994/article/details/108408420","18058429987@qq.com");
            return  new ApiInfo(
    
                    "狂神的Swagger日记",
                    "即使再小的帆也能远航",
                    "1.0",
                    "https://blog.csdn.net/wangzhihao1994/article/details/108408420",
                    contact,
                    "Apache 2.0",
                    "http://www.apache.org/licenses/LICENSE-2.0",
                    new ArrayList());
    
    
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    在这里插入图片描述
    2、运行,查询结果
    在这里插入图片描述

    3.2 Swagger配置扫描接口

    2、在SwaggerConfig类的方法docket中,添加如下内容,配置扫描接口,具体属性如下代码中的解释。

     /**
         * 配置swagger的Docket的Bean实例
         */
        @Bean
        public Docket docket(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    /*
                    配置要扫描的接口的方式
                    basePackage:指定要扫描的包
                    any():扫描全部
                    none():都不扫描
                    withClassAnnotation:扫描类上的注解,参数是一个注解的反射
                    withMethodAnnotation:扫描方法上的注解
                    例如:.apis(RequestHandlerSelectors.withMethodAnnotation(RestController.class))
                          只会去扫描类上的RestController的这些类
                     */
                    .apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
                    //过滤什么路径 相当于只扫描带有Kuang下面的请求
                    .paths(PathSelectors.ant("/kuang/**"))
                    .build();
    
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    3.3 配置Swagger是否启动

    enable();控制swagger是否启动
    若为false,则不可启动 swagger的ui界面会提示
    若为true,则可以启动
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    相关面试题:
    我只希望我的swagger在生产环境中使用,在发布的时候不适用?
    思路:1、判断是不是生产环境 flag=false
               2、注入enable(flag)

    解答:
               1、模拟多环境配置

    在这里插入图片描述
    其中application.properties里面添加如下内容:

    #激活dev环境
    spring.profiles.active=dev 
    
    • 1
    • 2

    application-dev.properties添加如下内容:

    server.port=8081
    
    • 1

    application-pro.properties添加如下内容:

    server.port=8082
    
    • 1

               2、将SwaggerConfig类中的内容修改为下面内容

    /**
     *SwaggerConfig 一定是要配置到springboot里面
     * 所以需要添加@Configuration注解
     * @author potential
     */
    @Configuration
    @EnableSwagger2 //开启swagger2
    public class SwaggerConfig {
        /**
         * 配置swagger的Docket的Bean实例
         */
        @Bean
        public Docket docket(Environment environment){
    
            //设置要显示的swagger环境
            Profiles profiles=Profiles.of("dev");
            /*
             获取项目的环境
             通过environment.acceptsProfiles()来判断是否在自己设定的环境当中
             */
            boolean flag = environment.acceptsProfiles(profiles);
    
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .enable(flag)
                    .select()
                    /*
                    配置要扫描的接口的方式
                    basePackage:指定要扫描的包
                    any():扫描全部
                    none():都不扫描
                    withClassAnnotation:扫描类上的注解,参数是一个注解的反射
                    withMethodAnnotation:扫描方法上的注解
                    例如:.apis(RequestHandlerSelectors.withMethodAnnotation(RestController.class))
                          只会去扫描类上的RestController的这些类
                     */
                    .apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
                    //过滤什么路径 相当于只扫描带有Kuang下面的请求
                    .paths(PathSelectors.ant("/kuang/**"))
                    .build();
    
    
        }
        /**
         * 配置Swagger信息的apiInfo
         */
        private ApiInfo apiInfo(){
            //作者信息
            Contact contact = new Contact("李","https://blog.csdn.net/wangzhihao1994/article/details/108408420","18058429987@qq.com");
            return  new ApiInfo(
    
                    "狂神的Swagger日记",
                    "即使再小的帆也能远航",
                    "1.0",
                    "https://blog.csdn.net/wangzhihao1994/article/details/108408420",
                    contact,
                    "Apache 2.0",
                    "http://www.apache.org/licenses/LICENSE-2.0",
                    new ArrayList());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    在这里插入图片描述
    测试结果:
    在这里插入图片描述

    3.4 配置Api文档的分组

    在SwaggerConfig类的Docket类中添加如下内容:

    .groupName("狂神")
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    相关题目
          如何配置多个组

    添加多个Docket实例即可
    在SwaggerConfig类中,添加如下内容:

    @Bean
        public Docket docket1(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .groupName("A");
        }
        @Bean
        public Docket docket2(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .groupName("B");
        }
        @Bean
        public Docket docket3(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .groupName("C");
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述
    测试:
    在这里插入图片描述

    3.5 配置Api文档的注解

    在controller中加入注解
    在这里插入图片描述

    测试
    在这里插入图片描述
    注意:
           在这里,在controller中加入的注解不要与pojo中加入的注解弄混淆了
           在pojo中如果想加入注释信息使用的注解如下面所示:
    在这里插入图片描述

  • 相关阅读:
    【ArcGIS Pro二次开发】:CC工具箱1.1.1更新_免费_安装即可用
    c语言常用语法,长时间不用容易忘。
    Elasticsearch:运用向量搜索通过图像搜索找到你的小狗
    122 买卖股票的最佳时机||(状态机DP)(灵神笔记)
    IEEE独立出版 | 第七届计算机科学与智能控制国际会议(ISCSIC 2023)
    泛型类的认识 - (了解数据结构的基础)
    Mycat分库分表
    OpUtils局域网唤醒:远程引导计算机
    玻璃生产过程中的窑内压力高精度恒定控制解决方案
    STC 51单片机50——中断问题演示
  • 原文地址:https://blog.csdn.net/junR_980218/article/details/126171715