使用Spring 3 RequestMapping Annotation匹配“其余URL”

可能重复:
Spring 3 RequestMapping:获取路径值

在Spring 3中,有没有办法在以下URL中捕获rest/of/the/url

 /myapp/foo/bar/rest/of/the/url 

通过使用这样的@RequestMapping注释:

 @RequestMapping(value="{appname}/{path1}/{path2}/{remainder}") public String myRequestMethod( @PathVariable("appname") String appName, PathVariable("path1") String path1, PathVariable("path2") String path2, PathVariable("remainder") String remainder) 

我希望RequestMapping像这样匹配

 {appname} -> myapp {path1} -> foo {path2} -> bar {remainder} -> rest/of/the/url 

在RequestMapping的Javadocs中 ,有一个关于使用备用正则表达式的注释:

默认情况下,URI模板将匹配正则表达式[^。] *(即句点以外的任何字符),但可以通过指定另一个正则表达式来更改,如下所示:/ hotels / {hotel:\ d +}

但是当我像这样使用RequestMapping时,这并不像预期的那样(我得到404):

 @RequestMapping(value="{appname}/{path1}/{path2}/{remainder:.[\\S]*}") 

有谁知道如何将其余的URL与Spring RequestMapping相匹配?

有趣的是:我也遇到了这样做的需要。 这是我解决它的方式:

 @RequestMapping(value = {"/someChildUrlIfYouWant/**"} 

这里的"**"表示“在我左边的任何子路径上抓住任何东西。” 如果你想要实际匹配的路径来获得这个方法,你可以使用:

 request.getAttribute( HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE ) 

您将获得/someChildUrlIfYouWant/the/full/path/to/whatever.html所以如果您只想要变量子路径,则必须修剪字符串的前部。

合理?

对于上面的尝试:

 @RequestMapping(value="{appname}/{path1}/{path2}/{remainder:.+}") 

Spring的默认行为是停止匹配’。’ 在url中不是很直观。 我不认为句点字符在路径的上下文中有任何特殊含义(而不是说’/’,’;’或’?’)。