我有一个spring请求映射方法,其中我为路径变量定义了正则表达式,但是当我测试这个方法时Spring抛出异常,我该怎么改变?
@GetMapping("/items/item/{name:[a-zA-Z]+(\\s[a-zA-Z]+)*}")
public Item getItemByName(@PathVariable String name) {
return itemService.getItemByName(name);
}
错误:
org.springframework.web.util.NestedServletException:Request 处理失败;嵌套异常是 java.lang.IllegalArgumentException:中的捕获组数 模式段([a-zA-Z] +(\ s [a-zA-Z] +)*)与 它定义的URI模板变量的数量,如果 捕获组用于URI模板正则表达式。使用非捕获 相反。
答案 0 :(得分:1)
从堆栈跟踪看起来你应该使用非捕获组。
使用[a-zA-Z]+(?:\\s[a-zA-Z]+)*
代替[a-zA-Z]+(\\s[a-zA-Z]+)*
如果您不需要该组捕获其匹配项,您可以将此正则表达式优化为Set(?:Value)?。
更多详情here