Spring Data Neo4j调用接口报ServletRequestPathUtils无方法错误如何解决
问题根因
你遇到的报错是典型的Spring依赖版本不匹配+技术栈不兼容两个问题叠加导致的:
- 依赖版本冲突:从报错堆栈能看到
spring-webmvc的版本是5.3.6,但你手动强制指定了spring-web的版本为5.3.2,两个模块版本不一致,5.3.2版本的spring-web里没有spring-webmvc 5.3.6要调用的ServletRequestPathUtils.setParsedRequestPath方法,直接触发NoSuchMethodError。 - 技术栈不兼容:你用的是
ReactiveNeo4jRepository反应式数据仓库,返回值是Flux,但你引入的是servlet栈的spring-boot-starter-web,传统Servlet栈不原生支持反应式类型返回值。
修复步骤
- 先删掉pom文件里手动引入的两个
spring-web依赖,spring-boot-starter-web本身已经携带了匹配版本的spring-web,手动指定版本反而会导致依赖冲突。 - 二选一处理技术栈兼容问题:
- 如果你要继续用反应式Neo4j操作,把
spring-boot-starter-web替换为spring-boot-starter-webflux,用反应式web栈适配反应式仓库返回的Flux类型 - 如果你不想改web栈,把
UserRepository继承的ReactiveNeo4jRepository改成普通的Neo4jRepository,控制器接口返回值从Flux<User>改成List<User>即可。
- 如果你要继续用反应式Neo4j操作,把
修改完成后重新拉取依赖、重启项目,接口就能正常返回数据。
内容的提问来源于stack exchange,提问作者Tris
相关产品推荐
相关产品推荐

