java.lang.NoSuchMethodError 是 Java 中常见的错误之一,通常发生在运行时,它意味着在编译时调用的某个方法在实际运行时找不到。具体到你提到的错误:

java.lang.NoSuchMethodError: ‘void org.springframework.web.method.ControllerAdviceBean.<init>()

这个错误的意思是,在代码中有某个地方调用了 ControllerAdviceBean 类的构造方法,但这个构造方法在当前版本的 Spring 框架中不存在。可能的原因和解决方法如下:

原因分析:

  1. Spring 版本不兼容:
    这种错误通常发生在 Spring 框架的版本不兼容时,特别是 ControllerAdviceBean 这个类的构造方法在不同版本之间发生了变化。可能你的代码是基于较旧版本的 Spring 框架编译的,但在运行时却使用了较新的 Spring 版本,或者反之。
  2. 依赖冲突:
    在某些情况下,项目中可能存在多个版本的 Spring 框架依赖。这种冲突可能导致某些方法在运行时找不到,因为加载了不正确的版本。
  3. 编译与运行环境不一致:
    如果你在本地开发环境编译时使用的是某个版本的 Spring,但在部署到生产环境或 CI/CD 流水线时,使用了不同的版本,那么也可能发生此错误。

解决方案:

  1. 检查 Spring 版本:
    确保编译和运行时的 Spring 版本一致。如果你正在使用 Maven 或 Gradle 来管理依赖,检查你的 pom.xml或 build.gradle 文件,确认 spring-web 和 spring-core 的版本一致。示例:<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.10</version> <!-- 确保版本一致 --> </dependency>
  2. 强制更新依赖:
    使用 mvn clean install(Maven)或 gradle clean build(Gradle)命令重新构建项目,确保所有的依赖都被正确下载并且没有版本冲突。
  3. 检查类路径中的冲突:
    检查项目中的依赖库,确保没有不同版本的 Spring 库混入类路径。可以通过命令 mvn dependency:tree或 gradle dependencies 查看所有依赖及其版本,确认是否存在冲突。
  4. 更新 Spring 版本:
    如果你使用的是较旧版本的 Spring,可以考虑升级到最新版的 Spring,这样可以避免一些已知的兼容性问题。尤其是如果你使用的是 Spring 4.x 或更早版本,推荐升级到 Spring 5.x 或更高版本。
  5. 排除冲突的依赖:
    如果使用了某些第三方库,也有可能这些库使用了不同版本的 Spring,这时候可以排除冲突的依赖,或者通过依赖管理来统一版本。在 Maven 中,你可以使用以下方式来排除冲突的依赖:<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.10</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </exclusion> </exclusions> </dependency>
  6. 使用兼容的 Spring Boot 版本(如果使用 Spring Boot):
    如果你的项目是基于 Spring Boot 的,确保 Spring Boot 的版本与你使用的 Spring 版本兼容。通常,Spring Boot 会包含适当版本的 Spring 相关依赖,但如果你手动管理版本,可能会导致版本冲突。

总结:

java.lang.NoSuchMethodError 在 ControllerAdviceBean 类的构造方法上出现,通常是由于 Spring 版本不匹配或依赖冲突导致的。检查项目中所有 Spring 相关依赖的版本,并确保它们一致,通常可以解决此问题。如果问题依然存在,可以尝试清除缓存并强制重新构建项目,或者查看 Spring 版本更新日志确认是否有相关 API 改动。