Spring WebSocket启动报错:无法从ClassLoader分析WebSocketHandlerMapping类
Failed to introspect Class WebSocketHandlerMapping的问题 这个报错通常是依赖版本不兼容或者缺失必要依赖导致的,结合你的pom.xml配置,我发现几个关键问题,一步步来解决:
1. 替换手动引入的WebSocket依赖为Spring Boot Starter
你现在手动引入了spring-websocket和spring-messaging,但没有使用Spring Boot官方提供的spring-boot-starter-websocket。这个starter会自动帮你管理所有WebSocket相关依赖的版本兼容性,避免手动引入带来的版本冲突。
把这两个依赖:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-messaging</artifactId> </dependency>
替换为:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
2. 修复Spring Session的版本冲突
你的pom里用了spring-session的1.0.0.BUILD-SNAPSHOT版本,这个版本是非常老旧的快照版,和你使用的Spring Boot 2.0.2.RELEASE完全不兼容(Spring Boot 2.x对应的Spring Session版本应该是2.x系列)。版本不匹配会导致Spring核心类的版本冲突,进而引发类 introspect 失败的错误。
修改Spring Session的依赖,去掉手动指定的版本(让Spring Boot Parent自动管理兼容版本):
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> </dependency>
或者手动指定匹配的版本,比如2.0.4.RELEASE(和Spring Boot 2.0.2兼容)。
3. 清理Maven缓存并重新构建
有时候本地Maven缓存的旧依赖会导致问题,执行以下命令清理缓存并重新下载依赖:
mvn clean install -U
4. 检查依赖树排查其他冲突
如果以上步骤还没解决问题,运行以下命令查看完整的依赖树,找出是否有其他版本冲突的依赖(比如Spring核心模块的版本不一致):
mvn dependency:tree
重点关注spring-core、spring-context等核心模块的版本,确保所有依赖都使用Spring Boot Parent管理的版本。
为什么会出现这个错误?
Failed to introspect Class本质是JVM在加载类时,无法找到该类依赖的其他类/方法,或者依赖的类版本不兼容。你遇到的情况主要是因为:
- 手动引入WebSocket相关模块,没有利用Spring Boot Starter的版本管理
- Spring Session版本过于老旧,和Spring Boot 2.x的核心依赖版本冲突
按照上面的步骤修改后,应该能解决启动问题。
内容的提问来源于stack exchange,提问作者Berrigan

