我有这个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})
因此它可以服务所有“不离港”的路线。但是,这会产生冲突,因为“ / route / to-destination-from-departure” URL实际上也与第二个RequestMapping匹配。 足够公平,所以我的解决方案是指定一个正则表达式:
@RequestMapping(value = "/route/to-{destination:^((?!-from-).)+}.html", method = {RequestMethod.GET, RequestMethod.HEAD})
因此,如果“目标”包含“ -from-”,则RequestMapping将不匹配。
而且...它不起作用!网址“ /route/to-barcelona-from-paris.html”已成功通过第一个RequestMapping提供,但网址“ /route/to-barcelona.html”却根本未提供...我缺少什么? / p>
注意:我不希望使用Java解决方案,例如只有一个“ / route / to- {destination}” RequestMapping,然后检查“目标”是否包含“ -from-” .. :)另外,我可以不会因为SEO而改变这些路线...
答案 0 :(得分:1)
您可以使用
"/route/to-{destination:(?!.*-from-).+}.html"
^
锚将搜索字符串的开头,并且此处将失败。
除行换行符以外的任何0+字符之后,(?!.*-from-)
否定的超前查找将使任何包含-from-
的输入失败。
.+
模式将消耗行末字符以外的全部1个或更多字符。
答案 1 :(得分:0)
尝试使用此:->
{目的地:^(?! from)+}
或
{目的地:^((?!-from-)。)+}