SpringBoot接入Knife4j接口文档

news2024/11/20 2:28:37

在这里插入图片描述

0.介绍

1) Knife4j是什么

Knife4j是Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,有着比Swagger更为美观的UI以及功能。

例如以下效果图:

image-20240518120553328

image-20240518120718512

2) 官方链接

官网:Knife4j · 集Swagger2及OpenAPI3为一体的增强解决方案. | Knife4j (xiaominfo.com)

代码:xiaoymin/knife4j: Knife4j is a set of Swagger2 and OpenAPI3 All-in-one enhancement solution (github.com)

3)SpringBoot版本兼容性

以下为简略的对应版本:

Spring Boot版本Knife4j Swagger2规范Knife4j OpenAPI3规范
1.5.x~2.0.0<Knife4j 2.0.0>=Knife4j 4.0.0
2.0~2.2Knife4j 2.0.0 ~ 2.0.6>=Knife4j 4.0.0
2.2.x~2.4.0Knife4j 2.0.6 ~ 2.0.9>=Knife4j 4.0.0
2.4.0~2.7.x>=Knife4j 4.0.0>=Knife4j 4.0.0
>= 3.0>=Knife4j 4.0.0>=Knife4j 4.0.0

更详细的介绍查看官网即可:

Knife4j版本参考 | Knife4j (xiaominfo.com)

接下来以 SpringBoot 2.7.6 + Knife4j 4.4.0 作为示例,介绍一些常用的功能。

1.SpringBoot整合Knife4j

1)引入依赖

这里选择的SpringBoot版本是2.7.6

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

2)运行项目

实际测试发现无需其他配置,引入依赖后运行项目,进入ip:port/doc.html页面即可访问接口文档。

以下仅为示例,注解演示的时候代码和下方的会有区别。

注意:ReqesutMapping注册的接口,会被识别为多个,建议接口使用@GetMapping等特定方式

image-20240518154153932

上图效果对应的Controller代码如下:

@Controller
public class BasicController {

    // http://127.0.0.1:8080/hello?name=lisi
    @GetMapping("/hello")
    @ResponseBody
    public String hello(@RequestParam(name = "name", defaultValue = "unknown user") String name) {
        return "Hello " + name;
    }

    // http://127.0.0.1:8080/user
    @RequestMapping("/user")
    @ResponseBody
    public User user() {
        User user = new User();
        user.setName("theonefx");
        user.setAge(666);
        return user;
    }

    // http://127.0.0.1:8080/save_user?name=newName&age=11
    @RequestMapping("/save_user")
    @ResponseBody
    public String saveUser(User u) {
        return "user will save: name=" + u.getName() + ", age=" + u.getAge();
    }

    // http://127.0.0.1:8080/html
    @RequestMapping("/html")
    public String html() {
        return "index.html";
    }

    @ModelAttribute
    public void parseUser(@RequestParam(name = "name", defaultValue = "unknown user") String name
            , @RequestParam(name = "age", defaultValue = "12") Integer age, User user) {
        user.setName("zhangsan");
        user.setAge(18);
    }
}

实体类:

public class User {

    private String name;

    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

2.常用注解

此处仅以个人工作和学习的常用场景和属性示例,每个注解可能有多个属性,详细说明请参考文档和代码。

1) @Tag

位置:使用在Controller类上

@Controller
@Tag(name = "BasicController - 基本控制器")
public class BasicController {
    ...

效果:对应文档中的Tag名字,即红框内容,不加Tag的话此处名字为basic-controller

image-20240518154553338

2) @Operation

位置:使用在方法上

  	@GetMapping("/hello")
    @ResponseBody
    @Operation(summary = "say hello")
    public String hello(@RequestParam(name = "name", defaultValue = "unknown user") String name) {
        return "Hello " + name;
    }

效果:使用summary修改方法的描述信息

image-20240518160559457

3) @Parameter

位置:使用在参数上或者方法上

    @GetMapping("/hello")
    @ResponseBody
    @Operation(summary = "say hello")
    public String hello(@Parameter(description = "用户名") @RequestParam(name = "name", defaultValue = "unknown user") String name) {
        return "Hello " + name;
    }

    @GetMapping("/user/{id}")
    @ResponseBody
    @Operation(summary = "获取用户信息")
    @Parameters({
            @Parameter(name = "id", description = "用户ID", required = true, example = "1234567890"),
            @Parameter(name = "name", description = "用户名", required = true, example = "theonefx")
    })
    public User getUesr(@PathVariable("id") Long id, @RequestParam String name) {
        User user = new User();
        user.setName(name);
        user.setAge(22);
        user.setId(id);
        return user;
    }

效果:

注意这里的示例值,是读取的@RequestParam的

image-20240518161411620

这里的示例值是@Parameter里的

image-20240518161446386

4) @Schema

位置:使用在实体类上及其属性上

@Schema(description = "User实体类")
public class User {

    @Schema(description = "用户ID")
    private Long id;

    @Schema(description = "用户名")
    private String name;

    @Schema(description = "用户年龄")
    private Integer age;
...

效果:

image-20240518162206328

这里的注解不仅对请求中的会有效果,也会影响包含此实体的响应的效果。

image-20240518162352945

X) 汇总

个人常用汇总:

注解属性描述
@Tagname使用在接口类上,用来影响接口文档一级标签的描述信息
@Operationsummary使用在接口上,影响接口文档二级标签的接口描述信息
@Parameterdescription使用在请求参数或者接口上(需要配合@Parameters),影响接口文档的请求参数-参数说明
@Schemadescription使用在实体类上,影响包含实体类的请求和响应的参数说明

image-20240518163550953

FAQ

1.接口已经定义好,但是在接口文档里找不到

检查下接口有没有@ResponseBody注解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1691912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mujava 工具的简单使用

首先下载openjava.jar和mujava.jar&#xff0c;以及自己手写一个mujava.config指向存放mujava的目录&#xff0c;并将这些文件放在mujava目录下。此时&#xff0c;基本的mujava环境就搭建好了。 分别创建src&#xff08;存放源码文件&#xff09;、classes&#xff08;存放源码…

使用pygame绘制图形

参考链接&#xff1a;https://www.geeksforgeeks.org/pygame-tutorial/?reflbp 在窗口中绘制单个图形 import pygame from pygame.locals import * import sys pygame.init()window pygame.display.set_mode((600,600)) window.fill((255,255,255))# pygame.draw.rect(wind…

针对上一篇微信同声传译语音播报部分坑的解决和优化

1. 上一篇语音播报其实是不完美的&#xff0c;就是如何停止上一个音频开始下一个音频的问题&#xff0c;我在此做一下修改 比如说&#xff1a;现在正在播放1&#xff0c;我点击2让2开始播放&#xff0c;1停止播放&#xff0c;我上面的写法是有问题的&#xff1a; 通过 innerAu…

编译器 编译过程 compiling 动态链接库 Linking 接口ABI LTO PGO inline bazel增量编译

编译器 编译过程 compiling 动态链接库 Linking 接口ABI LTO PGO Theory Shared Library Symbol Conflicts (on Linux) 从左往右查找:Note that the linker only looks further down the line when looking for symbols used by but not defined in the current lib.Linux 下…

【全部更新完毕】2024电工杯B题详细思路代码成品文章教学:大学生平衡膳食食谱的优化设计及评价

大学生平衡膳食食谱的优化设计及评价 摘要 大学阶段是学生获取知识和身体发育的关键时期&#xff0c;也是形成良好饮食习惯的重要阶段。然而&#xff0c;当前大学生中存在饮食结构不合理和不良饮食习惯的问题&#xff0c;主要表现为不吃早餐或早餐吃得马虎&#xff0c;经常食用…

JVM学习-垃圾收集器(三)

G1回收器-区域化分代式 为了适应不断扩大的内存和不断增加的处理器数量&#xff0c;进一步降低暂停时间&#xff0c;同时兼顾良好的吞吐量官方给G1设定的目标&#xff1a;延迟可控的情况下获得尽可能高的吞吐量&#xff0c;所以才担当起“全功能收集器”的重任与期望G1是一款面…

构建数字未来:探索Web3在物联网中的新视角

引言 随着Web3时代的来临&#xff0c;物联网技术正迎来一场新的变革。在这个数字化时代&#xff0c;Web3所带来的技术创新将为物联网的发展开辟新的视角。本文将深入探讨Web3在物联网领域的应用&#xff0c;揭示其在构建数字未来中的重要性和影响。 Web3与物联网的融合 区块链…

Docker学习笔记(二)Dockerfile自定义镜像、DockerCompose、Docker私有镜像仓库

文章目录 前言3 Dockerfile自定义镜像3.1 镜像结构3.2 Dockerfile文件3.3 构建自定义镜像3.3.1 基于Ubuntu构建Java项目3.3.2 基于Java8构建Java项目 3.4 小结 4 DockerCompose4.1 安装DockerCompose4.2 部署微服务集群 5 Docker私有镜像仓库 前言 Docker学习笔记(一)安装Dock…

ctfhub中的SSRF的相关例题(下)

目录 URL Bypass 知识点 相关例题 数字IP Bypass 相关例题 方法一&#xff1a;使用数字IP 方法二&#xff1a;转16进制 方法三&#xff1a;用localhost代替 方法四&#xff1a;特殊地址 302跳转 Bypass ​编辑 关于localhost原理: DNS重绑定 Bypass 知识点&…

每日练习之数学——砝码和天平

砝码和天平 题目描述 运行代码 #include<iostream> using namespace std; int main() {int w,m,T;cin>>T;while(T--){cin>>w>>m;while(m){if((m-1)%w0)m(m-1)/w;else if((m1)%w0)m(m1)/w;else if(m%w0)m/w;else break;}if(!m)cout<<"YES&…

「职场必备」让你摆脱思维混乱的7个工具

1. 升维思考&#xff0c;降维拆解 解决复杂问题时&#xff0c;有两个关键的阶段&#xff0c;能让我们事半功倍。 第一个阶段是思考阶段&#xff0c;要自下而上进行“升维思考”&#xff0c;明确问题的本质是什么。第二阶段是行动阶段&#xff0c;要自上而下进行“降维拆解”&am…

Excel查找匹配函数(VLOOKUP):功能与应用解析

文章目录 概述VLOOKUP函数语法查询并返回单列结果查找并返回多列结果MATCH函数VLOOKUPMATCH 从右向左逆向查找&#xff1a;INDEX函数INDEXMATCH 函数匹配方式查找匹配注意事项函数名称错误: #NAME?值错误&#xff1a;#VALUE!引用错误&#xff1a;#REF!找不到数据&#xff1a;#…

1、NLP分词

分词处理 1、token&#xff08;词汇单元&#xff09;2、Tokenizer&#xff08;分词&#xff09;3、ElasticSearch 分词器&#xff08;Analyzer&#xff09;4、分词工具停用词&#xff08;Stop words&#xff09; 1、token&#xff08;词汇单元&#xff09; “token”主要用于文…

AI早班车5.25

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

51-53 DriveWorld:通过自动驾驶世界模型进行 4D 预训练场景理解 (含模型数据流梳理)

24年5月&#xff0c;北京大学、国防创新研究院无人系统技术研究中心、中国电信人工智能研究院联合发布了DriveWorld: 4D Pre-trained Scene Understanding via World Models for Autonomous Driving。 DriveWorld在UniAD的基础上又有所成长&#xff0c;提升了自动驾驶目标检测…

linux之防火墙工具

netfilter Linux防火墙是由Netfilter组件提供的&#xff0c;Netfilter工作在内核空间&#xff0c;集成在linux内核中。 Netfilter在内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING)&#xff0c;而这五个hook function向用户…

人工智能应用-实验8-用生成对抗网络生成数字图像

文章目录 &#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;代码&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;分析结果&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;实验总结&#x1f9e1;&#x1f9e1; &#x1f9…

Stable Diffusion【艺术特效】【霓虹灯】:霓虹灯像素化马赛克特效

提示词 Neon pixelated mosaic of [Subject Description],highly detailed [主题]的霓虹灯像素化马赛克&#xff0c;高度详细 参数设置 大模型&#xff1a;万享XL_超写实摄影V8.2 采样器&#xff1a;Euler a 采样迭代步数&#xff1a;25 CFG&#xff1a;3 反向提示词&#x…

Docker Desktop安装和如何在WSL2中使用Docker

最近在使用WSL的过程中&#xff0c;想使用docker遇到了一些问题&#xff0c;在WSL中安装Linux版本的docker&#xff0c;启动镜像之后不能从Windows机器的端口映射出来&#xff0c;查了一圈之后&#xff0c;发现应该使用Docker Desktop软件&#xff0c;下面是安装和使用的方式 …

UE5 双手握剑的实现(逆向运动学IK)

UE5 双手握剑的实现 IK 前言 什么是IK&#xff1f; UE官方给我们提供了很多对于IK处理的节点&#xff0c;比如ABRIK、Two Bone IK、Full Body IK 、CCD IK等&#xff0c;但是看到这&#xff0c;很多人就好奇了&#xff0c;什么是IK&#xff1f; 首先我们来看看虚幻小白人的骨…