前言

之前介绍了如何在 Spring Boot 中集成 Swagger2 和 Swagger3,对于我们日常的接口管理已经够用了。但是作为一个颜值党,无论是 Swagger2 还是 Swagger3,都难以满足我们的审美。而且 Swagger2 和 Swagger3 都已经好久没更新了,更新还是比较慢的。

偶然之间发现了一个国产的接口文档管理工具 Knife4j,它基于 Swagger 而来,但是又对 Swagger 进行了增强,增加两个越来越多的个性化需求,可以说兼具颜值与实力了。今天我们就来看看,如何在 Spring Boot 中集成 Knife4j 这个接口文档管理工具。

集成过程

创建 Spring Boot 项目

既然要在 Spring Boot 中使用 Knife4j,那首先就得创建一个 Spring Boot 项目。当然,我在之前已经写过文章介绍如何创建 Spring Boot 项目了,所以这里不再赘述。如果你还对 Spring Boot 创建方式不太熟悉,可以参考我之前的文章:Spring Boot 基础教程:创建项目的 3 种方式 | JavaPark

添加依赖

既然是用 Maven 来管理项目依赖,那我们在项目 pom.xml 中引入 Knife4j 的相关依赖包,引入代码如下。

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

配置添加

接着在项目中创建一个配置包 config,用于配置 Swagger 的配置依赖。在这里可以配置扫描的 controller 所在的包,设置接口文档的标题、描述、作者信息等。

这里其实和 Swagger2 和 Swagger3 很相似,Swagger 也是可以通过配置类来指定这些信息。

package com.cunyu.springbootknife4jdemo.config;import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
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.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
@EnableSwagger2
@EnableKnife4j
public class Knife4jConfiguration {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).useDefaultResponseMessages(false).apiInfo(apiInfo()).select()                .apis(RequestHandlerSelectors.basePackage("com.cunyu.springbootknife4jdemo.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().description("Kinfe4j 集成测试文档").contact(new Contact("村雨遥", "https://cunyu.gitub.io/JavaPark", "747731461@qq.com")).version("v1.1.0").title("API测试文档").build();}}

编写 Controller 层

接着我们编写一个测试的 controller,用于在 Knife4j 中展示用,代码如下。

@Api(tags = "测试模块")
@RestController
public class DemoController {@ApiImplicitParam(name = "name", value = "姓名", required = true)@ApiOperation(value = "入门程序,Hello World")@PostMapping("/helloWorld")public ResponseEntity<String> helloWorld(@RequestParam(value = "name") String name) {return ResponseEntity.ok("Hello World," + name);}
}

启动测试

然后将项目启动起来,接着到浏览器中去打开 http://localhost:8080/doc.html,就会出现以下的主界面。这里有我们之前在配置类中所设置的一些接口信息,此外,还对接口进行了统计。因为我们代码中只写了一个 POST 的请求,所以这里统计出只有一个 POST 请求。

打开具体接口,这里就有我们接口的请求和响应的一些情况说明。

点击左侧 调试 按钮,我们就可以在 Knife4j 中测试我们的接口。

踩过的坑

当然,如果你按照以上步骤顺利打开了 Knife4j 的文档管理页面,那接下来的内容你大可不必了解。但如果你按照上边步骤搭建过程中也出现了问题,那不妨看看以下是否有你遇到的 Bug

空指针异常

首先是报空指针异常,报错信息如下。

Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

经过查询资料可知,这是因为 Springfox 使用的路径匹配是基于 AntPathMatcher 的,但是由于我使用的是 Spring Boot 2.6.x 版本,正好这个版本使用的是 PathPatternMatcher,所以才会出现这个问题。所以这里主要可以通过两种方式来解决。

第一种,无可厚非,就是将我们的 Spring Boot 的版本降低,从 2.6.x 降到 2.5.x,此时就应该是可以了,这里可以自己去试一下。

第二种,既然我们都已经用上 2.6.x 版本了,那我们就是不想降低版本咋整。此时,我们只需要在主程序启动类中加上 @EnableWebMvc 这个注解。然后再次启动程序,你就会发现启动成功了!

@EnableWebMvc
@SpringBootApplication
public class SpringbootKnife4jDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringbootKnife4jDemoApplication.class, args);}
}

请求路径未找到

一山放过一山拦,以为翻过了上面的山,就能成功了。没想到出师不利,这不又遇到了报错请求路径未找到。

当我们成功启动项目后,在浏览器中打开 http://localhost:8080/doc.html,却没想到迎接我们的不是成功界面,而是下面的 Whitelabel Error Page

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DMP0RV4z-1651224417803)(https://cdn.jsdelivr.net/gh/cunyu1943/blog-imgs@main/2022/04/image-20220429170230515.png)]

然后到 IDEA 中一看日志,程序照常运行,也没报错,但是给我们抛出了一个 WARN,警告信息如下:

No mapping for GET /doc.html

这是因为我们为了解决上面的 Bug 而使用到了 @EnableWebMvc,由于它实现了 WebMvcConfigurer 接口,所以会导致我们访问识别。

这时候问题就来了,上面又需要这个注解,但是下面这个问题又不需要,那该怎么办呢?

其实很简单,既然我们要保留 @EnableWebMvc,那我们去配置个规则不就好了。

在项目的 config 包下,我们新建一个配置类 WebMvcConfigurer 记成 WebMvcConfigurationSupport 类,接着将 dom.html 过滤掉即可。

@Configuration
public class WebMvcConfigurer extends WebMvcConfigurationSupport {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");super.addResourceHandlers(registry);}
}

完成上述配置后,再去运行项目,再到浏览器中去访问 http://localhost:8080/doc.html 应该就能正常访问 Knife4j 文档管理页面了。

总结

以上就是 Spring Boot 中集成 Knife4j 文档管理工具的内容了,这里主要讲了下如何集成并且进行一个最简单的接口调试,关于更多 Knife4j 的个性化功能,可以去它的官网了解下。

此外,对于文中集成是所遇到的 Bug,如果你没有遇到,那么你应该顺利集成了,如果你也有遇到,那么不妨跟着我去试一下解决的办法。

最后的最后,关于本文中所涉及的代码,我已经开源了,有需要到小伙伴可以去自取哦。

springboot-knife4j-demo

Spring Boot 基础教程:集成 Knife4j相关推荐

  1. spring boot基础教程:入门程序Hello World的编写

    前言 随着各种开源的第三方的组件爆发式增长,java的开发显得越来越笨重:繁多的配置,低下的开发效率,复杂的部署流程以及第三方技术集成难度大. 在上述环境下,Spring Boot应运而生.它使用&q ...

  2. spring boot基础教程之文件上传下载

    一文件上传 文件上传主要分以下几个步骤: (1)新建maven java project: (2)在pom.xml加入相应依赖: (3)新建一个文件上传表单页面; (4)编写controller; ( ...

  3. Spring Boot入门教程(四十):微信支付集成-刷卡支付

    分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业 ...

  4. Spring Boot入门教程(四十一):微信支付集成-扫码支付

    分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业 ...

  5. springboot做网站_Github点赞接近 100k 的Spring Boot学习教程+实战项目推荐!

    " 本文已经收录进:awesome-java (Github 上非常棒的 Java 开源项目集合) 很明显的一个现象,除了一些老项目,现在 Java 后端项目基本都是基于 Spring Bo ...

  6. Spring Boot 极简集成 Shiro

    点击关注公众号,Java干货及时送达 1. 前言 Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理. Shiro有三大核心组件: Subject: ...

  7. 2021 最新版 Spring Boot 速记教程

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 本文来源:http://r6d.cn/X6FP 结束了前面 ...

  8. Spring Cloud基础教程

    Spring Cloud基础教程  2017-04-04 被围观 90375 次 该教程内容不定时更新,如您对这些内容感兴趣,可以关注我的博客或微信公众号! 本教程示例代码: GitHub:https ...

  9. Spring boot AML教程

    Spring boot AML教程 Spring Boot 提供了大量的自动配置,极大地简化了spring 应用的开发过程,当用户创建了一个 Spring Boot 项目后,即使不进行任何配置,该项目 ...

最新文章

  1. 虚拟化云计算平台Proxmox VE
  2. Oracle Hint 之 Parallel
  3. 数据库操作错误:删除对于用户'root':数据库主体在该数据库中拥有架构,无法删除...
  4. uwp选取文件夹并读取其中的图片
  5. 薪资是跳出来的,不是涨出来的!
  6. 远程重启h3c路由器_梅林路由怎么开启远程访问
  7. 世界首个!AI农作物病害检测竞赛火热进行中 | AI Challenger 全球AI挑战赛
  8. 系统内存太少,VirtualBox无法启动虚拟机
  9. 【BZOJ1703】【usaco2007margold】ranking the cows 奶牛的魅力排名
  10. 计算机论文中期考核报告,(硕士学位论文中期考核报告范文.doc
  11. 利用 cookie,实现在html页面 记住我 功能
  12. 程序设计基础之C语言计算职工工资
  13. 每日阅读:你如何过一天,你就如何过一生
  14. 更新!又一批阿里网盘扩充码!亲测有效!数量较少,抓紧!
  15. matlab将矩阵数据归一化到[0,255]
  16. 资料:电视剧《楚汉骄雄》剧情简介
  17. 短信验证码接收网页版常见问题解答
  18. ODBC 驱动程序管理器 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配 解决方案
  19. 搞清楚nand flash和 nor flash 以及 spi flash 和cfi flash 的区别
  20. 爸妈,对不起,那不是我本意

热门文章

  1. 迅雷网页嗅探下载链接的实现
  2. 计算机桌面闪动,电脑屏幕闪动怎么解决_电脑屏幕闪烁不停抖动修复方法-win7之家...
  3. 编程之美学习笔记--一摞烙饼的排序
  4. WIN10系统文件加密(纯手工技巧,非代码类)
  5. 电容器的基础知识(2)
  6. DZ游戏网站模板 小鱼游戏风影传说商业GBK+UTF8版模板
  7. MySQL技术总结第一篇
  8. 蓝桥杯 —— Web前端(数据交互类)【标题即题目链接,点击查看具体要求】
  9. ​​​​​​​ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry ’1′ for key
  10. 《人人都是首席质量官》vs “人人都是产品经理” 及心得