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

Spring Boot3整合knife4j(swagger3)

目录

1.前置条件

2.导依赖

3.配置


1.前置条件

已经初始化好一个spring boot项目且版本为3X,项目可正常启动。

作者版本为3.2.2

初始化教程:

新版idea创建spring boot项目-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_62262918/article/details/135785412?spm=1001.2014.3001.5501

2.导依赖

knife4j官网:

Knife4j · 集Swagger2及OpenAPI3为一体的增强解决方案. | Knife4j (xiaominfo.com)icon-default.png?t=N7T8https://doc.xiaominfo.com/依赖选择:

作者的使用的spring boot 3.2.2为当前最新版,所以依赖导入最新的knife4j 4.4.0

pom.xml:

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

3.配置

官方文档(快速开始):

快速开始 | Knife4j (xiaominfo.com)icon-default.png?t=N7T8https://doc.xiaominfo.com/docs/quick-start

官方文档(详细配置):

3.1 增强模式 | Knife4j (xiaominfo.com)icon-default.png?t=N7T8https://doc.xiaominfo.com/docs/features/enhance

application.yml:

springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alphaapi-docs:path: /v3/api-docsgroup-configs:- group: '蒾酒'paths-to-match: '/**'#生成文档所需的扫包路径,一般为启动类目录packages-to-scan: com.mijiu#knife4j配置
knife4j:#是否启用增强设置enable: true#开启生产环境屏蔽production: false#是否启用登录认证basic:enable: trueusername: adminpassword: 123456setting:language: zh_cnenable-version: trueenable-swagger-models: trueswagger-model-name: 用户模块

写个接口:

@Tag注解:标记接口类别

@Operation:标记接口操作

@RestController
@Tag(name = "用户接口")
@RequestMapping("/user")public class UserController {private final UserService userService;public UserController(UserService userService) {this.userService = userService;}@GetMapping("/list")@Operation(summary = "用户列表")public List<User> test(){return userService.list();}@Operation(summary = "你好")@GetMapping("/hello")public Object test2(){return "hello";}
}

启动项目:

浏览器输入:http://ip:port/doc.html

接口已经识别到了

接下来配置以下接口文档的作者等信息

在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;/*** @author mijiupro*/
@Configuration
public class Knife4jConfig {@Beanpublic OpenAPI springShopOpenApi() {return new OpenAPI()// 接口文档标题.info(new Info().title("蒾酒的demo")// 接口文档简介.description("这是基于Knife4j OpenApi3的测试接口文档")// 接口文档版本.version("1.0版本")// 开发者联系方式.contact(new Contact().name("蒾酒").email("000000000@qq.com")));}}

重启项目,再次访问

每次都要打开浏览器输入地址访问不友好

启动类上优化:

@SpringBootApplication
@MapperScan("com.mijiu.mapper")
@Slf4j
public class SpringbootTemplateApplication {public static void main(String[] args) {SpringApplication app = new SpringApplication(SpringbootTemplateApplication.class);Environment env = app.run(args).getEnvironment();app.setBannerMode(Banner.Mode.CONSOLE);logApplicationStartup(env);}private static void logApplicationStartup(Environment env) {String protocol = "http";if (env.getProperty("server.ssl.key-store") != null) {protocol = "https";}String serverPort = env.getProperty("server.port");String contextPath = env.getProperty("server.servlet.context-path");if (StringUtils.isBlank(contextPath)) {contextPath = "/doc.html";} else {contextPath = contextPath + "/doc.html";}String hostAddress = "localhost";try {hostAddress = InetAddress.getLocalHost().getHostAddress();} catch (UnknownHostException e) {log.warn("The host name could not be determined, using `localhost` as fallback");}log.info("""----------------------------------------------------------\t应用程序“{}”正在运行中......\t接口文档访问 URL:\t本地: \t\t{}://localhost:{}{}\t外部: \t{}://{}:{}{}\t配置文件: \t{}----------------------------------------------------------""",env.getProperty("spring.application.name"),protocol,serverPort,contextPath,protocol,hostAddress,serverPort,contextPath,env.getActiveProfiles());}}

效果如图:

点击直接跳转。

完成!

相关文章:

  • 景联文科技大模型数据集更新!教育题库新增高质量数学题、逻辑推理题及英文题
  • Python + Open3D:使用Open3D读取和显示点云
  • 面试高频知识点:2线程 2.1 线程池 2.1.1 为什么使用线程池?
  • 网络协议与攻击模拟_09部署DHCP服务器
  • 使用DBSyncer同步Oracle11g数据到Mysql5.7中_实现全量数据同步和增量数据实时同步_操作过程---数据同步之DBSyncer工作笔记007
  • uniapp 用web-view嵌套网页地址并传参
  • C语言用户态函数可观测性
  • 前后台分离跨域交互
  • 【GitHub项目推荐--不错的Flutter项目】【转载】
  • part3 jdk17新特性详解
  • 数据结构排序算详解(动态图+代码描述)
  • 向设备树中添加pinctrl节点与gpio节点的方法
  • ReactHooks 官网文档翻译
  • React进阶 - 14(说一说”虚拟DOM“中的”Diff算法“)
  • 马尔可夫预测(Python)
  • [nginx文档翻译系列] 控制nginx
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【个人向】《HTTP图解》阅后小结
  • CentOS7简单部署NFS
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • HTTP 简介
  • java正则表式的使用
  • js作用域和this的理解
  • laravel 用artisan创建自己的模板
  • python3 使用 asyncio 代替线程
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • 从输入URL到页面加载发生了什么
  • 从重复到重用
  • 关于List、List?、ListObject的区别
  • 软件开发学习的5大技巧,你知道吗?
  • - 转 Ext2.0 form使用实例
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (十一)图像的罗伯特梯度锐化
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • **CI中自动类加载的用法总结
  • .Net 6.0 处理跨域的方式
  • .NET 8.0 发布到 IIS
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET企业级应用架构设计系列之技术选型
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • /bin、/sbin、/usr/bin、/usr/sbin
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)
  • [c++] 自写 MyString 类
  • [codeforces] 25E Test || hash