• Knife4j 基础(OpenAPI3+SpringBoot2.7)


    1. Knife4j基础(OpenAPI3 + SpringBoot2.7)

    本文按照官方文档,在 SpringBoot 2.7 项目中,集成 Knife4jOpenAPI3 版本。

    2. 官网

    Knife4j官网

    Knife4j在实现OpenAPI3规范时,底层基础框架选择 springdoc-openapi 项目。

    springdoc-openapi 官网

    3. 初始化项目

    3.1. 依赖

            <dependency>
                <groupId>com.github.xiaoymingroupId>
                <artifactId>knife4j-openapi3-spring-boot-starterartifactId>
                <version>4.3.0version>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.2. 配置

    3.2.1. yml配置

    # spring-doc-openapi项目配置
    spring-doc:
      swagger-ui:
        path: /swagger-ui.html
        tags-sorter: alpha
        operations-sorter: alpha
      api-docs:
        path: /v3/api-docs
      group-configs:
        - group: '默认分组'
          paths-to-match: '/**'
          packages-to-scan: com.example
    
    # knife4j的增强配置,不需要增强可以不配
    knife4j:
      enable: true
      setting:
        enable-footer: false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    3.2.2. @Configuration配置

    这里的配置,展示在文档首页中,对接口文档进行整体说明。

    package com.example.config;
    
    import io.swagger.v3.oas.models.OpenAPI;
    import io.swagger.v3.oas.models.info.Contact;
    import io.swagger.v3.oas.models.info.Info;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class Knife4jConfig {
        @Bean
        public OpenAPI customOpenAPI() {
            return new OpenAPI()
                    .info(new Info()
                            .title("Knife4j示例项目 - 接口文档")
                            .description("项目简介,支持Markdown格式:`这里是代码标签哦`,**这里是强调哦**")
                            .version("V1.0")
                            .contact(new Contact().name("宋冠巡"))
                    );
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    3.3. 接口注解

    演示基本的接口注解

    在Controller控制器及内部接口方法中,添加注解。

    package com.example.controller;
    
    import io.swagger.v3.oas.annotations.Operation;
    import io.swagger.v3.oas.annotations.Parameter;
    import io.swagger.v3.oas.annotations.Parameters;
    import io.swagger.v3.oas.annotations.enums.ParameterIn;
    import io.swagger.v3.oas.annotations.tags.Tag;
    import org.springframework.lang.Nullable;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("index")
    @Tag(name = "首页")
    public class IndexController {
    
        @Operation(summary = "向客人问好")
        @Parameter(name = "name", description = "姓名", in = ParameterIn.QUERY)
        @GetMapping("/hello")
        public String sayHi(@RequestParam String name) {
            return "Hi:" + name;
        }
    
    
        @Operation(summary = "测试参数可以为空")
        @Parameters({
                @Parameter(name = "name", description = "姓名", in = ParameterIn.QUERY)
        })
        @GetMapping("/nullable")
        public String testNullable(@Nullable String name) {
            return "Hi:" + name;
        }
    
    }
    
    
    • 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

    4. 页面效果页面效果

    4.1. 首页

    在这里插入图片描述

    4.2. 接口详情页

    在这里插入图片描述

    在这里插入图片描述

    5. @Parameter(required = false) 无效问题

    OpenAPI3中,接口文档默认接口参数必须填写;如果一个参数确实不是必须,要将此接口参数中注明为@Nullable。此时,接口文档才会根据 @Parameter - required 属性的值,展示参数是否必须

    import org.springframework.lang.Nullable;
    
    • 1
        @Operation(summary = "测试参数可以为空")
        @Parameters({
                @Parameter(name = "name", description = "姓名", in = ParameterIn.QUERY)
        })
        @GetMapping("/nullable")
        public String testNullable(@Nullable String name) {
            return "Hi:" + name;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6. OpenAPI3:Migrating from SpringFox

    进一步的细节,参考 springdoc-openapi 官方文档
    在这里插入图片描述

  • 相关阅读:
    VS 中的生成事件
    软考高级系统架构设计师系列论文十六:论软件系统测试及其应用
    使用 HTML、CSS 和 JavaScript 的实时计算器
    QT+OSG/osgEarth编译之二十七:Pixman+Qt编译(一套代码、一套框架,跨平台编译,版本:Pixman-0.42.2)
    Android 应用流量监控实践
    人体神经的作用与功能,人的神经系统的作用
    【linux命令讲解大全】033.Linux常用命令之atrm、colrm和hdparm
    聊聊设计模式——迭代器模式
    年薪20w+,做测试的第4年,从手工测试到自动化测试每一步都是艰难的~
    基于SSM养老院管理系统毕业设计-附源码221609
  • 原文地址:https://blog.csdn.net/sgx1825192/article/details/132866723