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

Spring版本异常?Spring MVC 4.1.7中@RestController相关问题排查

问题根源:Spring依赖版本冲突(运行时加载了旧版本3.2.9)

你遇到的问题其实很典型——运行时环境里混入了Spring 3.2.9的依赖,覆盖了你项目配置的4.1.7版本,这直接导致了@RestController注解无法正常工作,甚至抛出异常。

先解释几个关键点:

  1. @RestController是Spring 4.0才新增的组合注解,本质就是@Controller + @ResponseBody,4.1.7版本完全支持它的功能,理论上确实不需要额外加@ResponseBody。
  2. 而Spring 3.2.9版本根本没有@RestController这个注解!所以当运行时加载的是3.2.9的spring-webmvc包时:
    • 你加@ResponseBody时,方法能正常返回结果(因为3.2.9支持@ResponseBody);
    • 你只用@RestController时,这个注解相当于无效,Spring无法识别它的语义,自然会抛出异常。

为什么会出现3.2.9版本?

大概率是以下几种情况之一:

  • Maven传递依赖引入:你的某个第三方依赖间接引入了Spring 3.2.9的包,虽然你自己声明了4.1.7,但Maven的依赖仲裁规则可能让旧版本包被加载。
  • Tomcat容器自带旧依赖:你的Tomcat服务器的lib目录里存在Spring 3.2.9的核心jar包(比如spring-webmvc.jar、spring-web.jar),容器启动时会优先加载这些全局依赖,覆盖项目WAR包中的4.1.7版本。
  • WAR包打包异常:项目打包后,WEB-INF/lib目录里同时存在4.1.7和3.2.9的Spring相关jar,导致类加载混乱。

解决方案步骤:

  1. 清理Maven依赖树
    仔细查看你提供的mvn dependency:tree输出,找到引入Spring 3.2.9的依赖源,然后用<exclusions>标签排除掉旧版本依赖。比如:

    <dependency>
        <groupId>第三方依赖groupId</groupId>
        <artifactId>第三方依赖artifactId</artifactId>
        <version>版本号</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
            </exclusion>
            <!-- 根据实际依赖情况,排除所有3.2.9的Spring包 -->
        </exclusions>
    </dependency>
    

    另外,建议用Spring的BOM来统一管理所有Spring依赖版本,避免版本不一致:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-framework-bom</artifactId>
                <version>4.1.7.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  2. 检查Tomcat容器依赖
    打开你的Tomcat安装目录,进入lib文件夹,搜索所有spring-*.jar,如果发现3.2.9版本的包,直接删除它们,确保容器不会加载旧版本Spring。

  3. 验证WAR包内容
    把你部署的WAR包解压,查看WEB-INF/lib目录下的Spring相关jar,确认所有包都是4.1.7版本,没有混入3.2.9的包。如果有,重新打包清理旧依赖。

按照这几步操作,应该就能解决版本冲突的问题,让@RestController正常工作了。

内容的提问来源于stack exchange,提问作者xcs4me

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:12:46