// 第一次尝试的依赖
<dependencies>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
<version>4.1.0</version>
</dependency>
</dependencies>
因为这个版本的基于OpenAPi2规范的Knife4j底层使用的还是Spirngfox2.10.5,而这个版本的Springfox因为长时间不更新导致和SpringBoot2.7.15不兼容,导致无法正常启动,报错信息如下所示:
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182) ~[spring-context-5.3.29.jar:5.3.29]
at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.29.jar:5.3.29]
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:357) ~[spring-context-5.3.29.jar:5.3.29]
at java.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_341]
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:156) ~[spring-context-5.3.29.jar:5.3.29]
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:124) ~[spring-context-5.3.29.jar:5.3.29]
at org.springframework.context.support
一开始不知道是版本不兼容的问题,结果一直以为是自己配置有问题,搞了老半天。
解决方案:引入基于OpenApi3规范的Knife4j依赖,这个版本的Knife4j底层是基于Springdoc-openapi-ui框架,区别于Springfox,这个框架更新频率相对高得多,对新版本的Springboot有着更好的的支持。
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
配置实例:
package com.atguigu.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.springdoc.core.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class Knife4jConfig {
/***
* @description 自定义接口信息
*/
@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI()
.info(new Info()
.title("API接口文档")
.version("1.0")
.description("API接口文档")
.contact(new Contact().name("atguigu")));
// 设定作者
}
@Bean
public GroupedOpenApi adminApi() {
// 创建了一个api接口的分组
// 分组名称
// 接口请求路径规则
return GroupedOpenApi.builder()
.group("admin-api")
.pathsToMatch("/admin/**")
.build();
}
@Bean
public GroupedOpenApi webApi() {
// 创建了一个api接口的分组
return GroupedOpenApi.builder()
.group("web-api")
.pathsToMatch("/api/**")
.build();
}
}
启动正常: