正则表达式错误,改为使用非捕获组

时间:2018-05-04 11:32:22

标签: java regex spring spring-mvc spring-restcontroller

我有一个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模板正则表达式。使用非捕获   相反。

1 个答案:

答案 0 :(得分:1)

从堆栈跟踪看起来你应该使用非捕获组。

使用[a-zA-Z]+(?:\\s[a-zA-Z]+)*代替[a-zA-Z]+(\\s[a-zA-Z]+)*

  
    

如果您不需要该组捕获其匹配项,您可以将此正则表达式优化为Set(?:Value)?。

  

更多详情here