【问题标题】:Regex error, use non-capturing groups instead [duplicate]正则表达式错误,请改用非捕获组[重复]
【发布时间】:2018-05-04 11:32:22
【问题描述】:

我有一个 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: 请求 处理失败;嵌套异常是 java.lang.IllegalArgumentException: 中的捕获组数 模式段 ([a-zA-Z]+(\s[a-zA-Z]+)*) 与 它定义的 URI 模板变量的数量,如果 捕获组用于 URI 模板正则表达式。使用非捕获 改为分组。

【问题讨论】:

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


    【解决方案1】:

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

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

    如果你不需要组来捕获它的匹配,你可以把这个正则表达式优化成 Set(?:Value)?。

    更多详情here

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 2011-03-11
      • 2017-01-07
      • 2019-12-19
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多