JAVA SpringMVC老项目集成knife4j

news2025/7/19 11:15:50

需求: 原有一直使用showdoc工具对内或对外进行接口文档和功能的沟通,上层领导觉得人工进行手写

  1. 浪费很多人工维护时间
  2. 可能会做到接口更改而面对静态文档而更新不及时
  3. showdoc的劣势是不能进行在线调试 需要辅助其他调试工具

但领导只需要类似swagger官方的页面即可。通过调研了解到knife4j是一个集Swagger2 和 OpenAPI3为一体的增强解决方案。

knife4j介绍:

Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-uiui皮肤项目

一开始项目初衷是为了写一个增强版本的swagger的前端ui,但是随着项目的发展,面对越来越多的个性化需求,不得不编写后端Java代码以满足新的需求,在swagger-bootstrap-ui的1.8.5~1.9.6版本之间,采用的是后端Java代码和Ui都混合在一个Jar包里面的方式提供给开发者使用.这种方式虽说对于集成swagger来说很方便,只需要引入jar包即可,但是在微服务架构下显得有些臃肿。

因此,项目正式更名为knife4j,取名knife4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍,更名也是希望把她做成一个为Swagger接口文档服务的通用性解决方案,不仅仅只是专注于前端Ui前端.

swagger-bootstrap-ui的所有特性都会集中在knife4j-spring-ui包中,并且后续也会满足开发者更多的个性化需求.

主要的变化是,项目的相关类包路径更换为com.github.xiaoymin.knife4j前缀,开发者使用增强注解时需要替换包路径

后端Java代码和ui包分离为多个模块的jar包,以面对在目前微服务架构下,更加方便的使用增强文档注解(使用SpringCloud微服务项目,只需要在网关层集成UI的jar包即可,因此分离前后端)

此次集成的是SSM的老项目,故中途关于查阅相关资料与测试使用了一些时间,不同与springboot或微服务集成,官网提供了相对完善的资料,此次是基于springMVC进行老版本(2.0.4)的集成工作。

一、

老项目是使用的Gradle构建工具,首先通过仓库查询到knife4j的依赖包,将以下两个包引入

 二、创建配置文件  SwaggerConfig

关键点说明:

  1. .api是为了指定Controller扫描包路径
  2. @ComponentScan 目的是为了使用knife4j增强功能,在2.0.4版本之前必须使用该写法,在2.0.5之后可以使用@EnableKnife4j
@EnableWebMvc
@EnableSwagger2
@Configuration
@ComponentScan(
		basePackages = {
				"com.github.xiaoymin.knife4j.spring.plugin",
				"com.github.xiaoymin.knife4j.spring.web"
		}
)
public class SwaggerConfig {

	@Bean
	public Docket defaultApi() {
		return new Docket(DocumentationType.SWAGGER_2)
				.apiInfo(groupApiInfo())
				.groupName("平台接口")
				.select()		                            
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
				.paths(PathSelectors.any())
				.build();
	}


	private ApiInfo groupApiInfo() {
		return new ApiInfoBuilder()
				.title("调试接口文档")
				.description("对外关键接口文档说明")
				.termsOfServiceUrl("http://www.group.com/")
				.contact("group@qq.com")
				.version("1.0")
				.build();
	}

}

**注意点: 区别于SpringBoot的注入,不使用@Configuration注解注入到Spring的IOC容器中,采用<bean>XML注入的方式注入到Spring的容器中

例如我的配置是: 

三、配置静态文件

由于knife4j是通过webjar的方式提供服务,因此对外访问的doc.html需要在我们的mvc环境中配置静态目录,否则会出现404,在spring.xml主容器的配置文件中配置

例如我的配置是:

另外这里需要注意的是: 需要在地址 <mvc:exclude-mapping path 中将上述地址排除,否则会跳转到默认页面中

另外需要在web.xml中进行配置:  添加部分servlet-mapping节点,添加这些节点是防止swagger的接口出现404的出现

四、基础配置已配置好,可以在需要的接口上进行注解的配置

1、首先在控制器的接口中添加@Api的注解 

2、在指定的接口上指定接口方法与接口参数等信息 例如:

 

五、完成基本的配置 可以尝试访问doc路径地址

 

剩下的工作即 将旧有的showdoc中的文档 一一对应的在系统中编写对应的接口进行迁移测试即可,当迁移测试完善完成后,即可舍弃旧有的文档工具。 

 

 

 

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

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

相关文章

开发前后端交互规范与请求封装

开发前后端交互规范与请求封装一&#xff0c;背景说明二&#xff0c;Axios请求封装三&#xff0c;数据对象封装1&#xff0c;前端封装2&#xff0c;后端封装四&#xff0c;总结五&#xff0c;Axios拦截器七&#xff0c;Restful请求1&#xff0c;Restful的由来2&#xff0c;Rest…

亲测好用的开发工具【1】 RuoYi-MT

亲测好用的开发工具【1】 文章目录亲测好用的开发工具【1】RuoYi-MT1 问题引入2 RuoYi-MT3 使用RuiYi-MTRuoYi-MT 1 问题引入 没错&#xff0c;又是若依&#xff0c;今天遇到一个需求&#xff0c;就是用若依打底&#xff0c;做一个自己的前后端分离的后台管理系统。 但是吧&…

电科大离散数学-1-集合论基础

目录 1.1 集合的初见 1.1.1 集合的定义 1.1.2 集合的表示方法 1.1.3 集合的基数 1.2 特殊集合与集合间关系 1.2.1 空集 1.2.2 全集 1.2.3 集合的相等关系 1.2.4 包含关系 1.2.5 幂集 1.3 集合的运算 1.3.1 并运算 1.3.2 交运算 1.3.3 补运算 1.3.4 差运算 1.3.…

使用VUE3.0版本搭建H5模板

使用VUE3.0版本搭建H5模板 仓库地址&#xff0c;有需要的可以参考参考 https://gitee.com/young_frivolous/vue3-app-template/tree/master为了方便每次写项目都要去搭建一个框架&#xff0c;今天使用vue3.0从0开始实行一个开箱即用移动端模板&#xff0c;基于vue3.0全家桶 v…

Windows安装和完全卸载MySQL8(以MySQL8.0.31版本为例) 之 Zip 方式(超详细教程)

文章目录一. 前言二. 安装1.下载MySQL2. 安装MySQL3.小结&#xff1a;4.修改环境变量3.完全卸载一. 前言 MySQL8相比之前版本改动还是挺大&#xff0c;主要有以下几点&#xff1a; MySQL8之后并不需要my.ini&#xff0c;会自动的生成data文件夹在解压之后的文件&#xff0c;端…

ArcGIS水文分析工具

Fill 填洼 凹陷点是指未定义流域方向的像元&#xff1b;其周围的像元均高于它。倾泻点是汇流区域中具有最低高程的边界像元。如果凹陷点中充满了水&#xff0c;则水将从该点倾泻出去。Arcpy代码&#xff1a; Fill(in_surface_raster, {z_limit})Flow accumulation 流量 通过流…

某邮储银行数据归集系统在HTAP场景下的选型与实践

导语&#xff1a;面对HTAP能力的需求与云原生时代的趋势&#xff0c;以及国产化的浪潮&#xff0c;某邮储银行携手OceanBase打造了云原生时代下的国产分布式数据库场景实践体验。以下内容整理自某邮储银行运维方DBA的自述。 业务痛点 我们有一套针对业务内部的运营数据归集系统…

SpringBoot SpringBoot 开发实用篇 4 数据层解决方案 4.12 ES 简介

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇4 数据层解决方案4.12 ES 简介4.12.1 介绍4.12.2 全文搜索工作原理4.…

C++学习笔记(Ⅳ):C++提高编程

1 模板 1.1 模板的概念 建立通用的模板&#xff0c;提高代码复用性 1.2 函数模板 c还有一种利用模板的泛型编程 1. 语法 建立函数&#xff0c;其返回值类型和形参类型用虚拟类型代表 template<typename T> // 函数模板 template<typename T> // 声明一…

使用token登录提交到github

首先从GitHub上clone自己的仓库 git clone https://github.com/ljx2/SunnyWeather.git 修改一些文件 然后 git add ./ git commit -m ‘first commit’ 然后 git push origin main 提示输入用户名密码来验证 输完之后又提示需要创建token来上传&#xff0c;由于安全&#x…

M41T62Q6F 一款具有报警功能的低功耗串行实时时钟(RTC)芯片

M41T62Q6F是一款带有 32.768 kHz 振荡器的低功耗串行实时时钟(RTC)。8 个寄存器用于提供 时钟/日历功能&#xff0c;配置为二进制编码的十进制&#xff08;BCD&#xff09;格式。另有 8 个寄存器提供报警&#xff08;闹 铃&#xff09;、32 KHz 输出、校准以及看门狗功能的状态…

《树莓派项目实战》第七节 使用声音传感器检测声音

目录 7.1 引脚介绍 7.2 工作原理 7.3 连接到树莓派 7.4 编写代码检测声音有无 在本节&#xff0c;我们将学习如何使用声音传感器检测声音&#xff0c;该项目设计到的材料有&#xff1a; 树莓派 * 1面包板 * 1杜邦线若干声音传感器 * 17.1 引脚介绍 声音传感器一共有3个引脚…

噪声系数与插入损耗

目录噪声系数定义Friis噪声级联公式无源器件的噪声系数插入损耗&#xff1f;S参数文件能用来仿真噪声系数吗在计算射频链路的级联噪声时&#xff0c;我们会输入每一级的噪声系数以及增益&#xff0c;即可计算出整个射频链路的噪声系数&#xff0c;用于系统评估。但是有同学问我…

尚医通 (二十五) --------- 医院上传接口

目录一、医院系统模拟接口1. 服务部署2. 操作说明3. 上传接口与回调接口① 业务术语② 安全控制③ 业务接口④ 平台接口⑤ 医院接口二、集成 MongoDB三、添加医院基础类四、上传医院五、参数签名六、图片 Base64 编码一、医院系统模拟接口 1. 服务部署 ① 找到资源文件夹下面…

ArcGIS pro导出地图删除右下角小字制作者服务许可

ArcGIS pro导出地图删除右下角小字制作者服务许可 ArcGIS pro具有强大的制图功能&#xff0c;提供了丰富的底图。 研究者在使用这些底图出图时&#xff0c;发现地图右下角有__制作者名单、服务许可、来源&#xff1f;__ &#xff08;我也不知道它叫什么&#xff09;如下图 就…

【深入浅出Spring6】第六期——手写Spring框架与Spring IoC注解式开发

一、手写Spring框架 $ 准备工作 创建新的模块 myspring我们采用边测试边写框架的方式&#xff0c;所以还需要我们提供待测试的类 一号嘉宾——User类&#xff1a;用于一般类型传值测试 package com.powernode.myspring.bean; /*** author Bonbons* version 1.0*/ public clas…

【面试题】CSS响应式

1. rem是什么&#xff1f; rem&#xff0c;CSS3新增的一个相对单位&#xff08;root em&#xff0c;根em&#xff09;&#xff0c;相对于根元素&#xff0c;常用于响应式布局em&#xff0c;相对长度单位&#xff0c;相对于父元素&#xff0c;不常用px&#xff0c;像素&#xf…

中兴通讯完成基于低频 5G 商用基站的通感融合测试验证

11 月 16 日消息&#xff0c;今年 11 月&#xff0c;在 IMT-2020&#xff08;5G&#xff09;推进组的指导下&#xff0c;中兴通讯使用 4.9GHz 低频 5G 商用基站&#xff0c;完成了室外无人机、车辆和行人感知测试验证以及室内场景下呼吸感知的测试验证。验证结果显示&#xff0…

api-ms-win-crt-runtime-l1-1-0.dll文件加载失败是怎么造成的?怎么修复?

电脑中是含有大量不同类型的软件程序的&#xff0c;这些软件程序为用户们提供了丰富的功能&#xff0c;用户们使用这些软件的时候虽然看上去比较简单&#xff0c;但是电脑系统内部却是会调用大量文件的&#xff0c;在软件执行命令的过程中无论哪个环节出现了问题&#xff0c;都…

DDD系列 实战一 应用设计案例 (golang)

DDD系列 实战一 应用设计案例 (golang) 基于 ddd 的设计思想, 核心领域需要由纯内存对象基础设施的抽象的接口组成 独立于外部框架: 比如 web 框架可以是 gin, 也可以是 beego独立于客户端: 比如客户端可以是 web, 可以是移动端, 也可以是其他服务 rpc 调用独立于基础组件: 比如…