• 9、Springboot整合Swagger3


    1.什么是Swagger

    我们在编写了大量的接口之后,如果接口的调用者不是自身的话,那么就会面临要编写接口文档的苦恼,这时候Swagger就应运而生了。

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

    Swagger的组件:

    • Swagger spec:这一块对元素的嵌套、命令等采用官方模式。如果你想要对 Swagger 文件手动编码,你必须非常熟悉 Swagger spec。

    • Swagger editor:这是在线编辑器,用于验证你的 YML 格式的内容是否违反 Swagger spec 。YML 是一种句法,依赖于空格和嵌套。你需要对 YML 句法很熟悉才能很好的遵守 Swagger spec 规范。Swagger 编辑器会标出错误并且给你格式提醒(Swagger spec 文件可以使用 JSON 或者 YAML 中的任意一种格式)。

    • Swagger-UI:这是一套 HTML/CSS/JS 框架用于解析遵守 Swagger spec 的 JSON 或 YML 文件,并且生成API文档的UI导航。它可以将你的规格文档转换成Swagger Petsotre-like UI。

    • Swagger-codegen: 这个工具可以为不同的平台生成客户端 SDK(比如 Java、JavaScript、Python 等)。这些客户端代码帮助开发者在一个规范平台中整合 API ,并且提供了更多健壮的实现,可能包含了多尺度、线程,和其他重要的代码。SDK 是用于支持开发者使用 REST API 的工具。

    • Swagger-validator:这个小工具是用来校验生成的文档说明文件是否符合语法规定的。用法非常简单,只需url地址栏,根路径下加上一个参数url,参数内容是放swagger说明文件的地址,即可校验。

    2.版本介绍

    (1)Spring Boot 版本:2.7.2

    (2)Swagger版本:springfox-boot-starter : 3.0.0

    (3)JDK:1.8

    3.Springboot整合Swagger实例:

    springfox-boot-starter 该starter包含了一些swagger必要的自动配置类和启动器,其主要包括:

    • springfox-swagger:swagger核心,生成接口文档的Json格式数据
    • springfox-swagger-ui:swagger可视化,将Json数据可视化展示

    maven配置:

    <!-- swagger集成 -->
    >
    	>io.springfox>
    	>springfox-boot-starter>
    	>3.0.0>
    >
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    yml配置 :

    spring:
      mvc:
        pathmatch:
          matching-strategy: ant_path_matcher
     
    
    • 1
    • 2
    • 3
    • 4
    • 5

    swagger配置类:

    package com.springboot.test.config.swagger;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.oas.annotations.EnableOpenApi;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    
    /**
     * @author cf
     * @date 2022/12/3 18:56
     * @description swagger配置类
     */
    @Configuration
    @EnableOpenApi //开启swagger支持
    public class SwaggerConfig {
    
        /**
         * Docket类是Swagger的配置类,要自定义修改 Swagger 的默认配置信息,我们需要覆盖该对象
         * @return
         */
        @Bean
        public Docket docket(){
            //1.以OAS_30标准构建Docket配置类
            return new Docket(DocumentationType.OAS_30)
                    //2.配置Swagger接口文档基本信息apiInfo
                    .apiInfo(apiInfo())
                    //3.select方法开启配置扫描接口的Builder
                    .select()
                    //4.指定要扫描/维护接口文档的包(否则就全部扫描)
                    .apis(RequestHandlerSelectors.basePackage("com.springboot.test.controller"))
                    //5.路径过滤:该Docket-UI展示时,只展示指定路径下的接口文档(any表示都展示)
                    .paths(PathSelectors.any())
                    .build();
        }
    
        /**
         * 配置 Swagger 接口文档的基本信息
         * @return
         */
        private ApiInfo apiInfo(){
            return new ApiInfoBuilder()
                    //1.接口文档标题
                    .title("SpringBoot整合Swagger")
                    //2.接口文档描述内容
                    .description("这里是SpringBoot整合Swagger的详细信息")
                    //3.项目文档迭代版本
                    .version("9.0")
                    //4.主要联系人信息(姓名name,个人主页url,邮箱email)
                    .contact(new Contact("cf","www.1111.com","1111111@qq.com"))
                    //5.相关许可证信息
                    .license("The CSDN License")
                    //6.相关许可证链接
                    .licenseUrl("www.baidu.com")
                    //7.返回构建的ApiInfo对象
                    .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
    • 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
    • 62
    • 63
    • 64
    • 65

    controller进行测试

    @GetMapping("mybatisPlus/getUser")
        @ApiOperation(value="Mybatis查询", notes="Mybatis查询")
        public String getMybatisPlusUser() {
            TSystemUserMQEntity userEntity = systemUserService.getUserInfo();
            return JSON.toJSONString(userEntity);
        }
    
        @GetMapping("jpa/getUser")
        @ApiOperation(value="JPA查询(已注释)", notes="JPA查询(已注释)")
        public String getJpaUser() {
            UserEntity userEntity = userService.getUserInfo();
            return JSON.toJSONString(userEntity);
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    启动

    直接访问:http://localhost:8081/swagger-ui/index.html#/
    出来啦 ~~~ 出来啦~~~
    在这里插入图片描述

    4.Swagger Api概述

    文章只这里使用到了Swagger提供的注解@ApiOperation,常用的注解还有:

    (1)@Api:用在类上,说明该类的作用

    (2)@ApiOperation:用在方法上,说明方法的作用,标注在具体请求上,value和notes的作用差不多,都是对请求进行说明;tags则是对请求进行分类的,比如你有好几个controller,分别属于不同的功能模块,那这里我们就可以使用tags来区分了。

    (3)@ApiImplicitParams:用在方法上包含一组参数说明

    (4)@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面。

    (5)@ApiResponses:用于表示一组响应

    (6)@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息

    (7)@ApiModel:描述一个Model的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候)表明这是一个被swagger框架管理的model,用于class上

    (8)@ApiModelProperty: 这里顾名思义,描述一个model的属性,就是标注在被标注了@ApiModel的class的属性上,这里的value是对字段的描述,example是取值例子,注意这里的example很有用,对于前后端开发工程师理解文档起到了关键的作用,因为会在api文档页面上显示出这些取值来;

  • 相关阅读:
    Hexagon_V65_Programmers_Reference_Manual(32)
    搜索与图论 ---- 染色法判定二分图
    Imaris 卡退,是不是缓存盘没有设置好?
    web网页设计期末课程大作业 基于HTML+CSS+JavaScript响应式环保科技公司网站模板(环保主题网站设计)
    工程机械比例阀电流采集方案
    LSTM 词语模型上的动态量化
    js轮播图有,移入移出事件,左右滑动事件功能
    Coremail&奇安信2021邮箱安全报告:正常邮件数量首超普通垃圾邮件,防护初见成效
    带有执行器故障汽车驾驶机器人反步自适应容错控制
    配置VRRP与BFD联动实现快速切换实验详解
  • 原文地址:https://blog.csdn.net/daohangtaiqian/article/details/128165193