SpringBoot3整合Swagger3,访问出现404错误问题(未解决)

秉承着能用就用新的的理念,在JDK、SpringBoot、SpringCloud版本的兼容性下,选择了Java17、SpringBoot3.0.2整合Swagger3。

代码编译一切正常,Swagger的Bean也能加载,到了最后访问前端页面swagger-ui的时候出现404。

根据网上资料:
1、Swagger3依赖不同,Swagger3的依赖是

		<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

2、启动Swagger3的注解改变,Swagger3的启动注解为@EnableOpenApi
在这里插入图片描述

3、配置方法Docket中DocumentationType版本改变,变更为DocumentationType.OAS_30
在这里插入图片描述在这里插入图片描述

3、访问地址变更,从之前的http://localhost:8080/swagger-ui.html变更为http://localhost:8080/swagger-ui/index.html#/

4、重写WebMvcConfigurer类中的addResourceHandlers接口
在这里插入图片描述

5、全局配置@RestControllerAdvice,这个注解拦截了Swagger的返回地址,需要配置basePackages指定范围 @RestControllerAdvice(basePackages = {"net.exp.controller"})
在这里插入图片描述

到这里为止,都没有用还是没有解决访问404的问题。
根据Debug显示是在org.springframework.http.ResponseEntity没有<init>这个方法导致无法访问到swagger-ui页面。

本人技术到这里了,不知道是SpringBoot3里面做了拦截还是不兼容Swagger,没办法找到具体问题。

但是遇到问题解决问题,项目该做还得做,这里建议如果没有强制要求的情况下可以选择降低SpringBoot版本来兼容Swagger
或者不使用Swagger换一个其他的接口文档工具,这里个人推荐Apifox。

看到这里的小伙伴如果有解决办法了记得@我一下或者那个大牛找到了问题所在记得踢我一下我来学习一下。

<think>好的,我现在需要帮助用户解决Spring Boot 3整合Swagger时遇到的“Error creating bean with name &#39;apiDescriptionReader&#39;”的问题。首先,我得回忆一下Spring Boot 3Swagger之间的关系,以及可能的变化。 用户提到他们使用的是Spring Boot 3,而Spring Boot 3基于Spring Framework 6,后者可能移除了对某些旧库的支持。Swagger常用的库比如SpringFox可能在较新的Spring版本中存在兼容性问题。我记得SpringFox最近没有更新支持Spring Boot 3,所以用户可能还在用SpringFox,这会导致Bean创建失败。 接下来,我需要考虑可能的解决方案。首先,用户可能需要迁移到支持Spring Boot 3的替代库,比如SpringDoc OpenAPI。SpringDoc是当前比较推荐的替代方案,支持较新的Spring版本,并且配置方式与SpringFox类似。 然后,我应该分步骤说明如何替换依赖项,从原来的SpringFox依赖换成SpringDoc的依赖。比如,在pom.xml中移除SpringFox的相关依赖,添加SpringDoc的starter依赖。同时,提醒用户注意版本兼容性,确保使用支持Spring Boot 3SpringDoc版本,比如1.6.14或更高。 接下来,配置类的调整也是关键。用户原来的Swagger配置类可能使用了SpringFox的注解,比如@EnableSwagger2,需要替换成SpringDoc的配置类,使用@OpenAPIDefinition和@SecurityScheme等注解。需要给出一个示例配置类,说明如何定义OpenAPI的基本信息以及安全配置(如果有的话)。 另外,用户可能还需要调整Swagger UI的访问路径,因为SpringDoc默认的路径可能与SpringFox不同。需要指出新的访问路径,比如/swagger-ui.html变成/swagger-ui/index.html,或者通过配置进行自定义。 同时,需要检查应用程序的依赖是否彻底移除了SpringFox,避免残留的依赖导致冲突。比如,确保pom.xml或build.gradle中没有SpringFox的swagger2springfox-swagger-ui依赖。 可能还有其他问题,比如Spring Boot 3对Jakarta EE的支持,原来如果用户使用的是javax包,而Spring Boot 3使用jakarta,这可能导致类找不到的问题。不过SpringDoc应该已经适配了这一点,但需要确认依赖是否正确。 另外,用户可能需要更新他们的Swagger注解,比如从io.swagger.annotations切换到SpringDoc支持的注解,虽然很多注解是兼容的,但最好检查是否有变动。 最后,总结一下解决步骤:替换依赖、更新配置类、调整访问路径,并验证是否解决了Bean创建的错误。同时,提醒用户参考官方文档以确保配置的正确性。</think>在 Spring Boot 3整合 Swagger 时遇到 `Error creating bean with name &#39;apiDescriptionReader&#39;` 错误,通常是因为 **Spring Boot 3 移除了对 SpringFox(Swagger 2.x)的支持**。Spring Boot 3 基于 Spring Framework 6,而 SpringFox 尚未完全适配 Jakarta EE(取代了旧版 Java EE 的 `javax` 包,改为 `jakarta` 包),导致依赖冲突或 Bean 初始化失败。 --- ### **解决方案:改用 SpringDoc OpenAPI (Swagger 3.x)** **SpringDoc OpenAPI** 是当前支持 Spring Boot 3 和 Jakarta EE 的推荐方案。以下是迁移步骤: --- #### **1. 移除 SpringFox 依赖** 在 `pom.xml` 中删除以下 SpringFox 依赖(如果存在): ```xml <!-- 删除旧的 SpringFox 依赖 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> ``` --- #### **2. 添加 SpringDoc 依赖** 在 `pom.xml` 中添加 SpringDoc 的依赖(确保版本兼容 Spring Boot 3): ```xml <!-- SpringDoc OpenAPI 支持 --> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.1.0</version> <!-- 或最新版本 --> </dependency> ``` --- #### **3. 配置 OpenAPI 基本信息** 创建一个配置类(如 `OpenApiConfig.java`)定义 API 文档信息: ```java import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; import io.swagger.v3.oas.annotations.security.SecurityScheme; import org.springdoc.core.models.GroupedOpenApi; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @SecurityScheme( name = "BearerAuth", type = SecuritySchemeType.HTTP, scheme = "bearer", bearerFormat = "JWT" ) public class OpenApiConfig { @Bean public GroupedOpenApi publicApi() { return GroupedOpenApi.builder() .group("default") .pathsToMatch("/api/**") .build(); } } ``` --- #### **4. 自定义文档信息(可选)** 在 `application.yml` 或 `application.properties` 中添加文档元数据: ```yaml springdoc: swagger-ui: path: /swagger-ui.html tags-sorter: alpha operations-sorter: alpha api-docs: path: /v3/api-docs info: title: Your API Title description: Your API Description version: 1.0.0 ``` --- #### **5. 访问 Swagger UI** 启动应用后,通过以下 URL 访问: - **Swagger UI 界面**:`http://localhost:8080/swagger-ui.html` - **OpenAPI JSON**:`http://localhost:8080/v3/api-docs` --- ### **常见问题排查** 1. **依赖冲突** 确保完全移除了 SpringFox 依赖,残留的依赖会导致冲突。 2. **Jakarta EE 兼容性** Spring Boot 3 使用 `jakarta` 包(如 `jakarta.servlet`),而 SpringFox 依赖旧版 `javax` 包。SpringDoc 已适配 Jakarta EE,无需额外处理。 3. **路径匹配问题** 如果 API 未显示在文档中,检查 `GroupedOpenApi` 中的 `pathsToMatch` 是否匹配控制器路径。 --- ### **代码示例** 控制器中使用 Swagger 注解: ```java import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Tag(name = "示例接口", description = "示例 API") public class DemoController { @GetMapping("/api/hello") @Operation(summary = "打招呼接口", description = "返回一个问候语") public String hello() { return "Hello, SpringDoc!"; } } ``` --- 通过上述步骤,应该能解决 `apiDescriptionReader` Bean 初始化失败的问题。如果仍有错误,请检查依赖树(`mvn dependency:tree`)排除冲突依赖,并确保使用最新版本的 SpringDoc。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

水超涌也

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

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

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

打赏作者

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

抵扣说明:

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

余额充值