弹簧控制器中的正则表达式

2022-09-01 12:59:40

我正在尝试构建一个请求过滤器,只有当它与字母e的模式匹配时才会被使用,然后是一个数字。然而,我似乎无法让它工作。每次我尝试使用正则表达式时,我都会收到400个错误。

如果我只是使用以下,它“有效”,但也捕获没有我不想要的数字的映射。

@RequestMapping(value = "e{number}",
            method = RequestMethod.GET)

我尝试了以下组合。

@RequestMapping(value = "e{number}",
            params = "number:\\d+",
            method = RequestMethod.GET)

@RequestMapping(value = "e{number:\d+}",
            method = RequestMethod.GET)

@RequestMapping(value = "/e{^\\+?\\d+\$}",
            method = RequestMethod.GET)

@RequestMapping(value = "/{^\\e+?\\d+\$}",
            method = RequestMethod.GET)

答案 1

根据文档,您必须使用类似的东西。甚至还有一个例子:{varName:regex}

@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\\d\\.\\d\\.\\d}{extension:\\.[a-z]+}")
  public void handle(@PathVariable String version, @PathVariable String extension) {
    // ...
  }
}

答案 2

您应该使用:

 @RequestMapping("/e{number:\\d+})

请注意数字说明符前面的“转义斜杠”。\d