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

Spring 4.3.0.RELEASE中@RestController返回404问题求助

我来帮你排查这个@RestController返回404的问题,咱们一步步来分析:

1. 先检查请求路径的匹配问题

你的不工作场景中,控制器的映射是@RequestMapping(value = "/aa/", method = RequestMethod.GET)(末尾带斜杠),但你请求的地址是http://localhost:8080/srik/aa(不带斜杠)。虽然Spring MVC默认允许斜杠匹配,但不同版本可能有细微差异,你可以先尝试请求带斜杠的地址:http://localhost:8080/srik/aa/,看看是否能正常返回。

如果带斜杠能正常工作,而你想支持两种路径(带/不带斜杠),可以直接把映射改成"/aa"(去掉末尾斜杠),或者在<mvc:annotation-driven />里配置斜杠匹配规则。

2. 排查Jersey与Spring MVC的冲突

我注意到你的pom.xml里引入了Jersey(jersey-spring和jersey-server)依赖,Jersey是JAX-RS的实现框架,而Spring MVC是独立的MVC解决方案,两者在处理请求时可能会产生冲突。

@RestController是Spring MVC特有的注解(相当于@Controller + @ResponseBody),如果Jersey的类干扰了Spring MVC的注解扫描或请求处理逻辑,就可能导致@RestController的接口无法被正确识别。

你可以尝试暂时移除Jersey相关的依赖,然后重启项目,看看@RestController的接口是否能正常工作。如果恢复正常,就说明是Jersey的冲突问题,你可以选择:

  • 移除Jersey,完全使用Spring MVC来实现RESTful API
  • 配置Jersey的Servlet只处理特定前缀的请求(比如/api/*),避免和Spring MVC的DispatcherServlet争抢所有请求

3. 确认组件扫描是否覆盖到@RestController类

检查你的JSONController(使用@RestController的那个)是否在org.ateam.common包下?你的Spring配置里<context:component-scan base-package="org.ateam.common" />只会扫描这个包及其子包下的组件,如果类不在这个范围内,Spring就无法检测到它。

4. 修正pom.xml中的拼写错误

我看到pom里有个拼写错误:<maven-war-pugin>2.4</maven-war-pugin>,应该是<maven-war-plugin>2.4</maven-war-plugin>。虽然这个可能不是导致404的直接原因,但可能会影响项目打包和部署,建议修正。

5. 检查Spring配置文件的xsd版本

你的spring-servlet.xml里使用的是Spring 3.1的xsd,但项目用的是Spring 4.3.0版本,虽然向下兼容,但最好把xsd版本改成对应4.3的,避免潜在的配置问题:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
           http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

额外测试:简化@RestController的返回值

你可以暂时把不工作的控制器方法简化,直接返回字符串,看看是否能正常响应:

@RestController
public class JSONController {
    @RequestMapping(value = "/aa", method = RequestMethod.GET)
    public String orderBooking() {
        return "srik";
    }
}

这样可以排除ResponseEntity的使用是否有问题。

按照上面的步骤逐一排查,应该能找到问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:49:35