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

Spring Boot版本接口路径匹配错误问题处理方法

问题根因

Spring MVC路径匹配优先匹配「固定字面量占比更高」的模式,但你原有v2端点的路径规则/v2/{college}/{name}/{id}要求路径必须包含v2+3个路径段共4段内容,当你请求/info/v2/111/222/时,末尾斜杠被自动裁剪后实际只有v2、111、222共3个路径段,不满足v2端点的匹配条件,就会 fallback 到3段全变量的v1端点规则,把字面量v2当做college参数值,最终路由错误。
另外你原有v2方法里存在笔误:name参数的@PathVariable中required = name是非法值,需要修正为required = true。

解决方案

不需要修改传参方式,完全保留@PathVariable传参逻辑,只需要给v2端点绑定多一层路径匹配规则,同时把最后一个id路径变量设为非必填即可。带固定前缀v2的路径模式优先级天然高于全变量的v1模式,只要路径info后的第一段是v2就会优先匹配v2端点,不会错路由到v1。
修正后的代码如下:

@RestController
@RequestMapping(value = "info")
public class Controller {

    @RequestMapping(value = "{college}/{name}/{id}",method = RequestMethod.GET)
    public String get(@PathVariable(value = "college",required=true) String college,
              @PathVariable(value = "name", required = true) String name,
              @PathVariable(value = "id", required = true) String id) {
        return "THIS IS WORKING";
    }
    
    @RequestMapping(
            value = {"/v2/{college}/{name}/{id}", "/v2/{college}/{name}"},
            method = RequestMethod.GET
    )
    public String get1(@PathVariable(value = "college",required=true) String college,
              @PathVariable(value = "name", required = true) String name,
              @PathVariable(value = "id", required = false) String id) {
        // 业务侧可自行判断id是否为空做分支处理
        return "THIS IS WORKING in V2";
    }

}
匹配效果验证
  • 请求/info/计算机学院/张三/1001:正常匹配v1端点
  • 请求/info/v2/计算机学院/张三/1001:正常匹配v2端点
  • 请求/info/v2/计算机学院/张三/(省略最后id参数):匹配v2端点的/v2/{college}/{name}规则,id值为null,不会路由到v1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:48:34