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

REST资源命名:如何用@PathVariable区分路径中的两个{id}参数

如何用@PathVariable区分REST路径中的两个同名{id}参数

嗨,我懂你现在的问题——那个REST路径里两个{id}分别对应设备和脚本的唯一标识,但直接用单个@PathVariable long id肯定没法区分两者。其实解决方法很简单,只需要给路径里的占位符起不同的名字,然后在注解里对应上就行:

首先,修改你的请求映射路径模板,把两个模糊的{id}替换成有明确含义的占位符,比如设备ID用{deviceId},脚本ID用{scriptId},修改后的路径应该是:

http://api.example.com/device-management/managed-devices/{deviceId}/scripts/{scriptId}:clone

然后,在你的方法参数里,用@PathVariable的value属性显式指定每个参数对应的路径占位符名称。这样Spring就能准确把路径里的两个ID映射到对应的方法参数上了。修改后的方法签名如下:

@PostMapping("/device-management/managed-devices/{deviceId}/scripts/{scriptId}:clone")
public ResponseEntity<?> clone(HttpServletRequest request, 
                               @PathVariable("deviceId") long deviceId, 
                               @PathVariable("scriptId") long scriptId, 
                               ...) {
    // 现在你可以分别使用deviceId(对应设备的ID)和scriptId(对应脚本的ID)来处理业务逻辑了
}

补充几点:

  • 如果你开启了Java编译的-parameters选项(保留参数名),其实可以省略@PathVariable里的value,直接让参数名和路径占位符名一致就行,但显式指定value会让代码更健壮,避免编译选项变化带来的问题。
  • 路径末尾的:clone是REST风格中用来表示特定动作的常用写法,Spring完全支持这种路径格式,不需要额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:42:18