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

Spring Boot集成Swagger UI时出现NoSuchMethodError异常求助

Spring Boot集成Swagger UI时出现NoSuchMethodError异常求助

嘿,我看你在Spring Boot 3.4.5里整合springdoc-openapi-starter-webmvc-ui:2.3.0时碰到了NoSuchMethodError,这种坑我之前帮不少开发者踩过,大多是依赖版本不兼容或者冲突搞的鬼,咱们一步步来捋清楚。

先把你没写完的安全配置补全一个常见的场景,方便后续分析:

@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http.cors(Customizer.withDefaults()).csrf(AbstractHttpConfigurer::disable)
            .exceptionHandling((exceptionHandling) -> exceptionHandling.authenticationEntryPoint(authenticationEntryPoint))
            .authorizeHttpRequests(auth -> auth
                    .requestMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html").permitAll()
                    .anyRequest().authenticated())
            .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
    return http.build();
}

为什么会出现NoSuchMethodError?

这个异常本质是JVM加载类时找不到预期的方法,常见原因有这几个:

  • 版本适配问题:Spring Boot 3.x对springdoc-openapi的版本有严格要求,你用的2.3.0可能和Spring Boot 3.4.5的底层API不匹配——比如Spring框架的某些方法在3.4.5里有变更,而springdoc 2.3.0还在调用旧的方法。
  • 依赖冲突:你的项目可能间接引入了其他版本的springdoc相关依赖(比如springdoc-openapi-core的旧版本),导致类加载时拿到了错误版本的类,自然找不到对应的方法。
  • 编译缓存搞鬼:旧的编译产物没清理干净,导致新依赖的类没被正确加载,还是用了旧的类文件。

具体解决步骤

  1. 调整springdoc版本到适配范围
    Spring Boot 3.4.x建议使用springdoc-openapi-starter-webmvc-ui 2.5.0及以上版本,你可以修改项目的依赖配置:

    • 如果是Maven项目,修改pom.xml:
      <dependency>
          <groupId>org.springdoc</groupId>
          <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
          <version>2.5.0</version>
      </dependency>
      
    • 如果是Gradle项目,修改build.gradle:
      implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0'
      
  2. 排查并解决依赖冲突
    用依赖分析命令查看项目的依赖树:

    • Maven执行:mvn dependency:tree
    • Gradle执行:gradle dependencies
      找一找有没有多个版本的springdoc-openapi相关依赖(比如springdoc-openapi-core、springdoc-openapi-starter-common等),如果有,就在冲突的依赖里加上排除配置,比如:
    <dependency>
        <groupId>某个第三方依赖的groupId</groupId>
        <artifactId>某个第三方依赖的artifactId</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  3. 清理缓存重新构建
    有时候旧的编译缓存会捣乱,按这个步骤来:

    • 执行清理命令:Maven用mvn clean,Gradle用gradle clean
    • 删掉本地仓库里的springdoc相关缓存(比如Maven的~/.m2/repository/org/springdoc目录下的所有内容)
    • 重新构建项目:Maven用mvn install,Gradle用gradle build
  4. 检查安全配置中的方法调用
    确认你在SecurityFilterChain里调用的方法,比如requestMatchers、authenticationEntryPoint相关的方法,在当前Spring Boot和springdoc版本中都是存在的,没有被废弃或移除。如果有调用过时的方法,及时替换成新版本的API。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:35:27