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
相关产品推荐
相关产品推荐

