Spring @RequestMapping "Not Contains" 正则表达式

Spring @RequestMapping "Not Contains" Regex

我有这个 RequestMapping:

@RequestMapping(value = "/route/to-{destination}-from-{departure}.html", method = {RequestMethod.GET, RequestMethod.HEAD})

我想添加 RequestMapping:

@RequestMapping(value = "/route/to-{destination}.html", method = {RequestMethod.GET, RequestMethod.HEAD})

因此它可以为所有 "without departure" 路线提供服务。然而,这会产生冲突,因为“/route/to-destination-from-departure”url 实际上也与第二个 RequestMapping 匹配...... 很公平,所以我的解决方案是指定一个正则表达式:

@RequestMapping(value = "/route/to-{destination:^((?!-from-).)+}.html", method = {RequestMethod.GET, RequestMethod.HEAD})

如果 "destination" 包含“-from-”,那么 RequestMapping 将不匹配。

而且...它不起作用! url“/route/to-barcelona-from-paris.html”由第一个 RequestMapping 成功提供,但 url“/route/to-barcelona.html”未提供所有...我缺少什么?

注意:我不想使用 java 解决方案,例如只有一个“/route/to-{destination}” RequestMapping 然后检查 "destination" 是否包含“-from- ".. :) 此外,由于 SEO 的原因,我无法更改这些路线...

尝试使用这个 :->

{目的地:^(?!from)+}

{目的地:^((?!-from-).)+}

您可以使用

"/route/to-{destination:(?!.*-from-).+}.html"

^ 锚点将搜索字符串的开头,并且不会在此处进行任何匹配。

(?!.*-from-) 否定前瞻将使任何包含 -from- 的输入在除换行字符以外的任何 0+ 个字符之后失败。

.+ 模式将消耗除换行符以外的所有 1 个或多个字符到行尾。