当前位置: 首页 > article >正文

如何区别在Spring Boot 2 和 Spring Boot 3 中使用 Knife4j:集成与配置指南

在现代的 Web 开发中,API 文档是不可或缺的一部分。Knife4j 是基于 Swagger 的增强工具,它不仅提供了更友好的 API 文档界面,还支持更多实用的功能,如离线文档导出、全局参数配置等。本文将详细介绍如何在 Spring Boot 2Spring Boot 3 中集成 Knife4j,并讲解其常用配置和注解的使用方法。


一、Knife4j 简介

Knife4j(原名 Swagger-Bootstrap-UI)是 Swagger 的增强版,提供了以下核心功能:

  1. 更友好的界面:美观、简洁的 API 文档展示。
  2. 增强功能:支持离线文档导出、全局参数、调试增强等。
  3. 兼容性:支持 Swagger 2 和 OpenAPI 3 规范。
  4. 易用性:通过简单配置即可快速集成。

二、Spring Boot 2 中使用 Knife4j

1. 依赖引入

pom.xml 中添加 Knife4j 的依赖:

<XML>

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

2. 配置 Swagger

创建一个配置类,定义 Swagger 的基本信息:

<JAVA>

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.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")) // 扫描的包路径
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Knife4j Demo API")
                .description("Spring Boot 2 with Knife4j Example")
                .version("1.0")
                .build();
    }
}

3. 编写 Controller

创建一个示例 Controller,用于生成 API 文档:

<JAVA>

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
@Api(tags = "示例模块")
public class DemoController {

    @GetMapping("/hello")
    @ApiOperation(value = "示例接口", notes = "返回一个简单的问候语")
    public String hello() {
        return "Hello, Knife4j!";
    }
}

4. 访问 Knife4j 文档

启动项目,访问以下 URL:

  • Knife4j 文档页面:http://localhost:8080/doc.html
  • Swagger JSON 文档:http://localhost:8080/v2/api-docs

三、Spring Boot 3 中使用 Knife4j

1. 依赖引入

Spring Boot 3 使用 Jakarta EE 9+,因此需要引入 jakarta 版本的 Knife4j 依赖:

<XML>

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
    <version>4.2.0</version>
</dependency>

2. 配置 OpenAPI

创建一个配置类,定义 OpenAPI 的基本信息:

<JAVA>

import io.swagger.v3.oas.models.OpenAPI;
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 Demo API")
                        .version("1.0")
                        .description("Spring Boot 3 with Knife4j Example"));
    }
}

3. 编写 Controller

创建一个示例 Controller,用于生成 API 文档:

<JAVA>

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
@Tag(name = "示例模块", description = "示例模块 API")
public class DemoController {

    @GetMapping("/hello")
    @Operation(summary = "示例接口", description = "返回一个简单的问候语")
    public String hello() {
        return "Hello, Knife4j!";
    }
}

4. 访问 Knife4j 文档

启动项目,访问以下 URL:

  • Knife4j 文档页面:http://localhost:8080/doc.html
  • OpenAPI 3 JSON 文档:http://localhost:8080/v3/api-docs

四、Knife4j 常用配置

1. 配置启用 Knife4j

application.yml 中配置:

<YAML>

knife4j:
  enable: true # 启用 Knife4j
  setting:
    language: zh-CN # 界面语言为中文
    enable-swagger-models: true # 显示 Models
    enable-default-params: true # 启用默认参数

2. 离线文档导出

Knife4j 支持将文档导出为 Markdown、HTML 或 Word 格式:

  1. 访问 Knife4j 文档页面。
  2. 点击右上角的“离线文档”按钮。
  3. 选择导出格式并下载。

3. 全局参数

在 Swagger 配置类中添加全局参数:

<JAVA>

import springfox.documentation.service.ApiKey;
import springfox.documentation.service.SecurityScheme;

@Bean
public Docket createRestApi() {
    return new Docket(DocumentationType.SWAGGER_2)
            .securitySchemes(Collections.singletonList(new ApiKey("Authorization", "Authorization", "header")))
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
            .paths(PathSelectors.any())
            .build();
}

五、Knife4j 常用注解

1. 类级别注解

  • @Api(Swagger 2)(springboot2使用注解):用于标识 API 模块的名称。

    <JAVA>

    @Api(tags = "示例模块")
  • @Tag(OpenAPI 3 (springboot3使用注解)):用于标识 API 模块的名称。

    <JAVA>

    @Tag(name = "示例模块", description = "示例模块 API")

2. 方法级别注解

  • @ApiOperation(Swagger 2)(springboot2使用注解):用于描述 API 接口的详细信息。

    <JAVA>

    @ApiOperation(value = "示例接口", notes = "返回一个简单的问候语")
  • @Operation(OpenAPI 3)(springboot3使用注解):用于描述 API 接口的详细信息。

    <JAVA>

    @Operation(summary = "示例接口", description = "返回一个简单的问候语")

3. 参数级别注解

  • @ApiParam(Swagger 2)(springboot2使用注解):用于描述 API 参数。

    <JAVA>

    @ApiParam(name = "name", value = "用户名称", required = true)
  • @Parameter(OpenAPI 3)(springboot3使用注解):用于描述 API 参数。

    <JAVA>

    @Parameter(name = "name", description = "用户名称", required = true)

六、总结

Knife4j 是 Swagger 的增强版,适合在 Spring Boot 项目中生成美观、功能强大的 API 文档。本文详细介绍了如何在 Spring Boot 2 和 Spring Boot 3 中集成 Knife4j,并讲解了常用配置和注解的使用方法。

如果你正在为 API 文档的生成和展示而烦恼,不妨试试 Knife4j,它会为你的开发工作带来极大的便利!😊


参考资源

  • Knife4j 官方文档
  • Swagger 官方文档

希望这篇博客对你有所帮助,欢迎在评论区分享你的使用体验或提出问题!🚀


http://www.kler.cn/a/597251.html

相关文章:

  • Dart语言的安全开发
  • 为容器指定固定IP地址
  • 2024 浅浅总结
  • golang 生成单元测试报告
  • 我的ffmpeg爬坑之路(3)
  • SPI 机制与 Spring Boot AutoConfiguration 对比解析
  • Flink实战教程从入门到精通(基础篇)(一)Flink简介
  • web客户端存储,IndexDB相关讲解
  • NLP高频面试题(七)——GPT和Bert的mask有什么区别?
  • React 中 Context 的作用是什么,在什么场景下使用它?
  • 2025蓝桥杯JAVA编程题练习Day7
  • Kafka集成Debezium监听postgresql变更
  • 5、Pytorch 实现简单图卷积GCN,数据集Cora分类任务
  • 基于AOP注解+Redisson实现Cache-Aside缓存模式实战
  • 【八股文】http怎么建立连接的
  • NISP 无线通信安全
  • 以mysql 为例,增删改查语法及其他高级特性
  • Java爬虫需要设置哪些请求头?
  • PostgreSQL_安装
  • STM32-ARM