Spring Boot+Gradle中ServletRequestAttributes源码字节码不匹配问题求助
问题解决思路及方案
核心问题分析
你的问题根源在于依赖冲突与版本不兼容:
- Spring Boot 3.1.4基于Spring 6.x,但你引入的
springfox-swagger2:2.9.2仅支持Spring Boot 2.x及以下版本,会导致类加载时出现字节码与源码不匹配的问题。 - 同时引入
spring-boot-starter-webflux和spring-webmvc,这是两个互斥的Web栈,会引发类路径冲突。 - 手动添加的
org.eclipse.jetty:jetty-http:9.4.19.v20190610版本过旧,与Spring Boot 3.x的依赖版本不兼容。
具体解决步骤
1. 修正build.gradle依赖配置
移除冲突、过时的依赖,统一Web栈,替换Swagger为Spring Boot 3兼容的版本:
plugins { id 'java' id 'org.springframework.boot' version '3.1.4' id 'io.spring.dependency-management' version '1.1.3' } group = 'com.demo' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { // 选择Spring MVC作为Web栈(REST API推荐) implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework:spring-jdbc' implementation 'org.springframework.security:spring-security-web' // 替换Springfox为Spring Boot 3兼容的SpringDoc OpenAPI implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.mockito:mockito-core' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' annotationProcessor 'org.projectlombok:lombok' } tasks.named('test') { useJUnitPlatform() }
2. 彻底清理缓存并同步项目
- 执行Gradle清理命令:
./gradlew clean build --refresh-dependencies - 清理IDE缓存(以IntelliJ为例):
File -> Invalidate Caches...,勾选"Clear file system cache and local history"后重启IDE - 重新同步Gradle项目:点击IDE右侧Gradle面板的"Refresh"按钮
3. 验证代码
修正依赖后,((ServletWebRequest) request).getRequest().getRequestURI()的getRequestURI()方法应该能正常解析,因为Spring 6.x中HttpServletRequest的该方法是存在的,之前的报错是依赖冲突导致的类加载异常。
内容的提问来源于stack exchange,提问作者YWVsbDk1
相关产品推荐
相关产品推荐

