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

Spring模糊处理方法映射问题:同结构GET接口命名规范咨询

适用的REST API设计规范及解决方案

以下是符合行业通用REST设计规范、且不会产生路径歧义的可选方案,按推荐优先级排序:

方案1:集合资源过滤用查询参数(最推荐)

这是REST API设计的通用准则:路径变量用于定位唯一资源,查询参数用于过滤集合资源

  • 单个化学制品查询接口保持不变,符合通过唯一ID定位单资源的规范:
    @GetMapping("/chemical/{id}")
    
  • 实验室化学制品集合查询改为根路径+必填查询参数,不需要修改路径结构:
    @GetMapping("/chemical")
    // 方法参数添加 @RequestParam(required = true) String labKey
    
    访问路径为/chemical?labKey=myLab,完全不会和单资源查询路径产生冲突。

方案2:路径语义分层

通过路径前缀明确区分两种查询的业务语义,无使用限制:

  • 单个化学制品查询接口保持不变:
    @GetMapping("/chemical/{id}")
    
  • 实验室化学制品集合查询增加语义前缀,两种可选写法:
    // 写法1:语义更清晰,明确表示「指定实验室下的所有化学制品」
    @GetMapping("/labs/{labKey}/chemicals")
    // 写法2:保持chemical根路径前缀
    @GetMapping("/chemical/lab/{labKey}")
    

方案3:路径变量正则匹配(仅适用于特定场景)

如果你的化学制品ID全部为纯数字,且labKey不会出现纯数字的取值,可直接给路径变量添加正则限定,Spring会自动按规则路由请求,不需要调整现有请求路径:

// 只有路径后缀为纯数字的请求才会进入该接口
@GetMapping("/chemical/{id:\\d+}")
// 非纯数字后缀的请求自动进入实验室查询接口
@GetMapping("/chemical/{labKey}")

该方案局限性较强,不推荐labKey可能为纯数字的场景使用。

不推荐冗余路径方案

你提到的@GetMapping("/chemical/{labKey}/{id}")方案确实没有必要,仅当你后续需要增加实验室维度的权限校验(比如限制用户只能查询所属实验室的化学制品)时才需要使用该结构。

内容的提问来源于stack exchange,提问作者Kristóf Steindl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:05