行业资讯 2025年08月6日
0 收藏 0 点赞 851 浏览 5245 个字
摘要 :

文章目录 1、Springfox概述 2、Springboot集成Swagger2步骤演示 1、创建SpringBoot项目 2、导入swagger依赖 3、编写配置文件 4. 配置基本信息 5、配置接口信息 6、 配……




  • 1、Springfox概述
  • 2、Springboot集成Swagger2步骤演示
    • 1、创建SpringBoot项目
    • 2、导入swagger依赖
    • 3、编写配置文件
    • 4. 配置基本信息
    • 5、配置接口信息
    • 6、 配置分组信息
    • 6、控制 Swagger 在不同环境的开启与关闭

    上一节我们了解了Swagger简介,知道了Swagger是干什么的有什么作用,接下来我们一起看下Springboot如何集成Swagger2。

    1、Springfox概述

    Springfox是一个基于Spring的组件,它是基于Swagger的发展而来的全新项目。Springfox的主要优势在于它能够根据代码自动生成接口文档,而不需要手动修改描述文件(如YAML或JSON)。这使得在频繁更新项目版本时,开发人员只需修改代码,而不必费心更新描述文件,从而保持接口文档的实时性。

    Springfox利用Spring的AOP(面向切面编程)特性将Swagger集成进来,底层仍然使用Swagger,但使用起来更加方便。因此,在实际开发中,许多开发团队倾向于直接使用Springfox,以简化接口文档的维护和更新工作。这种方式有助于确保接口文档与实际代码的一致性,同时减轻了开发人员的工作负担。

    2、Springboot集成Swagger2步骤演示

    1、创建SpringBoot项目

    如何创建SpringBoot项目,这里就不再详细说明,如果不会,请参考:《SpringBoot教程:创建Hello World应用程序》

    2、导入swagger依赖

    在pom.xml中导入swagger依赖,这里我们使用swagger2版本,需要导入两个依赖包,如下:

     <!--swagger依赖-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <!--swagger ui-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    
    

    通过在项目中引入 Springfox,可以扫描相关的代码,生成该描述文件,进而生成与代码一致的接口文档和客户端代码。

    3、编写配置文件

    在配置文件 config 目录下,添加 swagger 的配置文件 Swagger2Config.java

    @Configuration // 配置类
    @EnableSwagger2 // 开启 swagger2 的自动配置
    public class Swagger2Config {
    }
    

    这个时候 Swagger 已经算是整合到项目之中了,可以启动SpringBoot项目,浏览器输入:http://localhost:8080/swagger-ui.html (这里的端口与你Springboot中yml配置文件中保持一致,一般默认是8080)即可查看 swagger 文档,如下:Springboot集成Swagger2

    可以看到 Swagger 文档中大概有这四类信息

    • 基本信息
    • 接口信息
    • 实体类信息

    4. 配置基本信息

    Swagger 有自己的实例 Docket,如果我们想要自定义基本信息,可以使用 docket 来配置 swagger 的基本信息,基本信息的设置在 ApiInfo 这个对象中。

    Swagger 默认的基本信息展示:Springboot集成Swagger2

    ApiInfo 中默认的基本设置如下:

    • title:Api Documentation
    • description:Api Documentation
    • version:1.0
    • termsOfServiceUrl:urn:tos
    • contact:无
    • license:Apache 2.0
    • licenseUrl:http://www.apache.org/licenses/LICENSE-2.0

    Swagger2Config.java 配置文件添加以下内容:

    @Bean
    public Docket docket() {
        // 创建一个 swagger 的 bean 实例
        return new Docket(DocumentationType.SWAGGER_2)
                // 配置基本信息
                .apiInfo(apiInfo());
    }
    /**
     * 基本信息设置
     */
    private ApiInfo apiInfo() {
        Contact contact = new Contact(
                \"潘子夜\", // 作者姓名
                \"https://www.panziye.com\", // 作者网址
                \"xxxxblog@126.com\"); // 作者邮箱
        return new ApiInfoBuilder()
                .title(\"潘子夜博客-接口文档\") // 标题
                .description(\"专注分享编程技术\") // 描述
                .termsOfServiceUrl(\"https://hao.panziye.com\") // 跳转连接
                .version(\"1.0\") // 版本
                .license(\"Swagger教程\")
                .licenseUrl(\"https://www.panziye.com/back/9777.html\")
                .contact(contact)
                .build();
    }
    

    注意:这里的Contact类是springfox下的:

    import springfox.documentation.service.Contact;

    重启项目,再次访问swagger文档页,发现就变成我们刚刚设置的了:Springboot集成Swagger2

    5、配置接口信息

    默认情况下,Swagger 是会展示所有的接口信息的(点击basic-error-controller即可展开),包括最基础的 basic-error 相关的接口Springboot集成Swagger2

    有时候我们希望不要展示 basic-error-controller 相关的接口,或者是说这想要显示某些接口,比如说:user-controller 下的接口,由该怎么去实现呢?这个时候就需要设置 扫描接口

    @Bean
    public Docket docket() {
        // 创建一个 swagger 的 bean 实例
        return new Docket(DocumentationType.SWAGGER_2)
    
                // 配置接口信息
                .select() // 设置扫描接口
                // 配置如何扫描接口
                .apis(RequestHandlerSelectors
                                //.any() // 扫描全部的接口,默认
                                //.none() // 全部不扫描
                                .basePackage(\"com.test.springbootdemo.controller\") // 扫描指定包下的接口,最为常用
                        //.withClassAnnotation(RestController.class) // 扫描带有指定注解的类下所有接口
                        //.withMethodAnnotation(PostMapping.class) // 扫描带有只当注解的方法接口
    
                )
                .paths(PathSelectors
                                .any() // 满足条件的路径,该断言总为true
                        //.none() // 不满足条件的路径,该断言总为false(可用于生成环境屏蔽 swagger)
                        //.ant(\"/user/**\") // 满足字符串表达式路径
                        //.regex(\"\") // 符合正则的路径
                )
                .build();
    }
    

    controller包下新增Usercontroller类:

    @Controller
    @RequestMapping(\"/user\")
    public class UserController {
    
        @PostMapping(\"/query-user-info\")
        public void queryUserInfo(){
    
        }
    }
    

    重启再次访问效果如下:

    Springboot集成Swagger2

    可以看到之前 basic-error-controller 相关的接口已经没有了,这里要求你的controller下有接口文件,否则直接显示“No operations defined in spec!”

    6、 配置分组信息

    Swagger 默认只有一个 default 分组选项,如果没有设置,所有的接口都会显示在 default `分组下,如果功能模块和接口数量一多,就会显得比较凌乱,不方便查找和使用。

    swagger 文档中组名默认是 default,可通过 .groupName(String )

    @Bean
    public Docket docket() {
        // 创建一个 swagger 的 bean 实例
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName(\"panziye\"); // 修改组名为 \"panziye\"
                
    }
    
    

    Springboot集成Swagger2

    如果需要配置多个组的话,就需要配置多个 docket() 方法,这里我就简单写两组,代码如下:

    /**
     * 展示 controller 包下所有的接口
     */
    @Bean
    public Docket docket1() {
        // 创建一个 swagger 的 bean 实例
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName(\"panziye\") // 修改组名为 \"mike\"
                // 配置接口信息
                .select() // 设置扫描接口
                // 配置如何扫描接口
                .apis(RequestHandlerSelectors
                        .basePackage(\"com.test.springbootdemo.controller\") // 扫描指定包下的接口,最为常用
                )
                .paths(PathSelectors
                        .any() // 满足条件的路径,该断言总为true
                )
                .build();
    }
    
    /**
     * 展示路径为 /error 的所有接口(基础接口)
     */
    @Bean
    public Docket docket2() {
        // 创建一个 swagger 的 bean 实例
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName(\"hao\") // 修改组名为 \"hao\"
                // 配置接口信息
                .select() // 设置扫描接口
                // 配置如何扫描接口
                .apis(RequestHandlerSelectors
                        .any() // 扫描全部的接口,默认
                )
                .paths(PathSelectors
                        .ant(\"/error\") // 满足字符串表达式路径
                )
                .build();
    }
    

    重启服务,打开 Swagger 文档,接口信息改变如下所示:

    组名为 panziye 的文档中只有 user-controller 相关的接口信息,组名为 hao 的文档中只有 basic-error-controller 相关的接口信息

    Springboot集成Swagger2

    6、控制 Swagger 在不同环境的开启与关闭

    在开发或者测试环境下,我们开启 swagger 会方便前端和后端的交互,但是如果在生产环境下也开启 swagger 的话,是会将接口暴露出去的,有极大风险,如何让 swagger 根据不同的环境来决定是否开启?

    这里我准备了四个项目的配置文件,devtestpro 三个环境的配置文件仅是端口上的不同Springboot集成Swagger2

    • application.yml ————– 全局配置文件
    • application-dev.yml ——— 开发环境配置文件
    • application-test.yml ——– 测试环境配置文件
    • application-pro.yml ——– 生产环境配置文件

    application.yml 内容如下,用于指定选择的环境:

    spring:
      profiles:
        active: dev
    

    可以通过代码判断此时是在什么环境:devtestpro,如果是在 pro 生产环境,则关闭 swagger。

    /**
     * swagger 配置
     * @param environment 环境
     */
    @Bean
    public Docket docket(Environment environment) {
    
        // 设置环境范围
        Profiles profiles = Profiles.of(\"dev\",\"test\");
        // 如果在该环境返回内则返回:true,反之返回 false
        boolean flag = environment.acceptsProfiles(profiles);
    
        // 创建一个 swagger 的 bean 实例
        return new Docket(DocumentationType.SWAGGER_2)
                .enable(flag); // 是否开启 swagger:true -> 开启,false -> 关闭
    }
    

    在 application.yml 全局配置文件中环境指向 dev 时,是可以打开 swagger 的,如果我将 application.yml 全局配置文件中环境指向 pro 时,就不能打开 swagger 了,提示 Could not render e, see the console 。

    Springboot集成Swagger2

    以上就是Springboot集成Swagger2的全部内容,希望对你有帮助。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9445.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号