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 个或多个字符到行尾。
我有这个 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 个或多个字符到行尾。