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

Spring MVC:Ant风格RequestMapping URL映射异常问题排查

问题原因分析

咱们先从日志和你的代码配置里找线索:

首先看你的EmployeeController类上的@RequestMapping("/*emp*")是Ant风格的前缀,而getEmployeeList()方法上的@RequestMapping("/employees")是以斜杠开头的绝对路径。在Spring MVC的规则里,方法上的路径如果以/开头,默认会直接映射到上下文根路径下,不会和类上的前缀拼接——这就是为什么你访问/Spring/employees能成功,因为日志里明确有/employees的映射记录。

那为什么日志里还会有/*emp*/employees/的映射?这是Spring对Ant风格前缀的额外处理,但它只生成了带末尾斜杠的路径映射,没有生成不带斜杠的/*emp*/employees。所以当你访问/Spring/emp/employees(不带末尾斜杠)时,找不到对应的映射,就返回404了;但如果访问/Spring/emp/employees/(带斜杠),应该是可以正常打开页面的。

解决方案

根据你的需求,要在现有实现下访问/Spring/emp/employees,可以选下面几种方法:

方法1:修改方法上的RequestMapping路径(推荐)

把方法上的@RequestMapping("/employees")改成不带开头斜杠的形式:

@RequestMapping("employees")
public ModelAndView getEmployeeList() {
    // 原代码不变
}

这样类上的/*emp*会和方法的路径自动拼接,生成/*emp*/employees的映射,不管带不带末尾斜杠的/emp/employees都能匹配到,同时原来的/employees路径会失效(如果需要保留这个路径,可以看方法2)。

方法2:保留双路径映射

如果想同时支持/Spring/employees和/Spring/emp/employees,可以给方法添加多个映射路径:

@RequestMapping(value = {"/employees", "employees"})
public ModelAndView getEmployeeList() {
    // 原代码不变
}

这样既保留了绝对路径的/employees映射,又生成了和类前缀拼接的/*emp*/employees映射,两个路径都能正常访问。

方法3:临时解决方案(访问时加末尾斜杠)

不需要修改代码,直接访问带末尾斜杠的路径:http://localhost:8080/Spring/emp/employees/,就能匹配到日志里的/*emp*/employees/映射,正常打开页面。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:48:46