You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Spring Boot 3.4.1后springdoc生成OpenAPI JSON失败

问题分析与解决方案

核心原因

Spring Boot 3.4.x 基于 Spring Framework 6.1.x,而 springdoc-openapi-starter-webmvc-ui 2.2.0 适配的是 Spring Framework 6.0.x 版本的 API。Spring Framework 6.1 中对 ControllerAdviceBean 的单参数构造器做了移除/修改,导致版本不兼容触发 NoSuchMethodError。

解决方案

1. 升级 springdoc-openapi 到兼容版本

springdoc-openapi 从 2.6.0 开始正式支持 Spring Boot 3.4.x,直接更新依赖:

<!-- Maven 依赖 -->
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.6.0</version>
</dependency>
// Gradle 依赖
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0'

2. 排查并清理依赖冲突

执行命令检查依赖树,确认是否有旧版 Spring Framework 组件被间接引入:

# Maven 命令
mvn dependency:tree
# Gradle 命令
./gradlew dependencies

如果发现 spring-web/spring-context 存在 6.0.x 版本,在 springdoc 依赖中排除冲突:

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.6.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 简化 ControllerAdvice 配置

确保异常处理类使用框架默认扫描机制,避免手动初始化 ControllerAdviceBean:

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> handleGenericException(Exception ex) {
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
                .body(new ErrorResponse(ex.getMessage()));
    }

    // 内部错误响应类
    private static class ErrorResponse {
        private String message;
        public ErrorResponse(String message) { this.message = message; }
        public String getMessage() { return message; }
    }
}

参考信息

异常堆栈示例

java.lang.NoSuchMethodError: 'void org.springframework.web.method.ControllerAdviceBean.<init>(java.lang.Object)'
    at org.springdoc.webmvc.api.OpenApiResource.initControllerAdviceBeans(OpenApiResource.java:456)
    at org.springdoc.webmvc.api.OpenApiResource.getOpenApi(OpenApiResource.java:193)
    at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:144)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207)
    // 省略后续堆栈内容

原异常处理类示例

@ControllerAdvice
public class CustomExceptionHandler {
    @ExceptionHandler(IllegalArgumentException.class)
    public ResponseEntity<String> handleIllegalArgument(IllegalArgumentException ex) {
        return ResponseEntity.badRequest().body(ex.getMessage());
    }
}

内容的提问来源于stack exchange,提问作者garmoshka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:12:01