Swagger 与 SpringBoot 版本不匹配出现的问题

现象

首先,介绍下我所用的 swagger 和 springboot 的版本,如下:

  • springfox-boot-starter(swagger) 3.0.0
  • spring-boot-starter-parent 2.1.3.RELEASE

此时启动 springboot,会出现如下错误信息:

Caused by: java.lang.NoSuchMethodError: org.springframework.plugin.core.PluginRegistry.getPluginFor(Ljava/lang/Object;)Ljava/util/Optional;
    at springfox.documentation.schema.plugins.SchemaPluginsManager.viewProvider(SchemaPluginsManager.java:95)
    at springfox.documentation.spring.web.readers.operation.OperationModelsProvider.viewForReturn(OperationModelsProvider.java:116)

解析

上边错误信息的意思是,swagger 要依赖于 spring-plugin-core 中的 getPluginFor 方法,但是该方法在当前 springboot 项目的所依赖的 spring-plugin-core 中不存在。swagger 3.0.0 ,也就是 springfox-boot-starter 3.0.0 需要依赖不低于 2.0.0.RELEASE 版本的 spring-plugin-core,如下图:
在这里插入图片描述
当前 springboot 项目引入的 spring-boot-starter-parent 的版本是 2.1.3.RELEASE,这里边的 spring-plugin-core 对应的是哪个版本呢?如下图:
在这里插入图片描述
通过上图我们可以看到,当前 springboot 项目实际依赖的是 spring-plugin-core 1.2.0.RELEASE 版本,由于该版本低于 2.0.0.RELEASE,自然也就报错了。让我们通过父 pom 中的定义看得再清楚些:
在这里插入图片描述

解决

通过上文的解析,显然是因为 “springboot 项目引入的 spring-plugin-core 版本低于 2.0.0.RELEASE” 而导致的。所以,我们可以通过强制将 spring-plugin-core 版本指定为 2.0.0.RELEASE 版本来解决这个问题了,如下图:
在这里插入图片描述

### 解决方案 为了使 Swagger 3 和 Spring Boot 3 实现兼容配置,可以采取以下措施: #### 1. 使用 `springdoc-openapi` 替代 `springfox` 由于 `springfox` 的维护已经停止,并且其最新版本可能无法完全支持 Spring Boot 3.x 版本,因此推荐使用更现代的替代品——`springdoc-openapi`。该库提供了更好的兼容性和功能扩展。 在项目的 `pom.xml` 文件中添加以下依赖项: ```xml <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.0.4</version> </dependency> ``` 此依赖会自动集成 OpenAPI 文档生成功能以及 Swagger UI 页面[^5]。 --- #### 2. 配置路径匹配策略 Spring Boot 3 默认使用的路径匹配器是 Rfc6570UrlPathMatcherFactory,而 Swagger 可能仍然需要传统的 Ant 路径匹配器。可以通过修改配置文件来调整路径匹配策略,在 `application.properties` 或 `application.yml` 中添加以下内容: 对于 `application.properties`: ```properties spring.mvc.pathmatch.matching-strategy=ant_path_matcher ``` 对于 `application.yml`: ```yaml spring: mvc: pathmatch: matching-strategy: ant_path_matcher ``` 这一步是为了确保 Swagger 正确解析 URL 请求路径[^3]。 --- #### 3. 启用并自定义 Swagger 功能 如果需要进一步定制化 Swagger 行为,可以在 Java 配置类中启用相关设置。创建一个新的配置类,例如 `OpenApiConfig.java`,代码如下所示: ```java import org.springdoc.core.models.GroupedOpenApi; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class OpenApiConfig { @Bean public GroupedOpenApi publicApi() { return GroupedOpenApi.builder() .group("springboot-rest-api") // 定义分组名称 .pathsToMatch("/api/**") // 匹配指定路径下的接口 .build(); } } ``` 通过上述方式,可以根据实际需求灵活控制哪些 API 接口被暴露给文档页面。 --- #### 4. 访问 Swagger UI 页面 完成以上步骤之后,启动应用程序即可访问默认地址查看生成好的交互式 API 文档界面,默认路径通常为 `/swagger-ui.html` 或者 `/swagger-ui/`[^5]。 注意:具体路径取决于所引入的依赖包及其内部实现逻辑,请根据实际情况确认最终入口链接。 --- ### 总结 综上所述,针对 Spring Boot 3 和 Swagger 3 的兼容性问题,建议采用现代化解决方案即迁移到 `springdoc-openapi` 库;同时配合调整路径匹配机制以满足框架间协作需求。这样仅能够有效解决问题还能获得更加稳定高效的开发体验。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cab5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值