在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
在爪哇 for RequestMapping中,有一个关于使用备用正则表达式的说明:
默认情况下,URI模板将与正则表达式^.* (即除句点以外的任何字符)相匹配,但可以通过指定另一个正则表达式来更改这一点,如: /hotels/{hotel:\d+}
但是,当我使用这样的RequestMapping时,它的行为并不像预期的那样(我得到404):
@RequestMapping(value="{appname}/{path1}/{path2}/{remainder:.[\\S]*}")
有人知道如何将URL的其余部分与匹配吗?
发布于 2012-06-28 08:13:34
有趣的是:我也觉得有必要这么做。我就是这样解决的:
@RequestMapping(value = {"/someChildUrlIfYouWant/**"}
这里的"**"
说:“在我左边的任何一条小径上拿任何东西。”如果您希望它实际匹配的路径到达此方法,则可以使用:
request.getAttribute( HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE )
您将得到/someChildUrlIfYouWant/the/full/path/to/whatever.html
,所以如果您只想要变量子路径,就必须修剪字符串的前端部分。
讲得通?
发布于 2011-04-18 17:19:02
对于上面的内容,请尝试:
@RequestMapping(value="{appname}/{path1}/{path2}/{remainder:.+}")
Spring的默认行为,以停止对“.”的匹配。在urls中并不是很直观。我认为,在路径的上下文中,周期角色没有任何特殊的含义(与“/”、“;”或“?”相反)。
https://stackoverflow.com/questions/4542489
复制