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

Spring请求映射路径变量正则捕获组报错,应改用非捕获组?

解决Spring路径变量正则捕获组异常的方案

嘿,这个问题我之前也碰到过!你之所以会收到这个异常,是因为Spring在解析路径变量的正则表达式时,会把正则里的普通捕获组(也就是不带?:的())当成需要提取的额外路径变量。但你这里只是想匹配“空格+字母组合”的重复模式,根本不需要捕获这个组的内容,所以就触发了捕获组数量不匹配的错误。

解决方法很简单,把正则里的捕获组改成非捕获组就行——非捕获组用?:作为组的开头,它只负责匹配模式,不会被Spring当作要提取的路径变量。

修改后的完整代码如下:

@GetMapping("/items/item/{name:[a-zA-Z]+(?:\\s[a-zA-Z]+)*}")
public Item getItemByName(@PathVariable String name) {
    return itemService.getItemByName(name);
}

简单说下原理:你的原正则(\\s[a-zA-Z]+)是一个捕获组,Spring会认为这是另一个需要绑定到方法参数的变量,但你的方法只有一个name参数,所以就报错了。改成(?:\\s[a-zA-Z]+)后,这个组就只是用来定义重复匹配的规则,不会被Spring提取成额外变量,自然就解决了异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:02:50