1.问题:匹配上url中的反斜杠"/"(%2f)
在springmvc 里,我要匹配:
http://yourdomain.com/start/xx/xx/xx/end
@RequestMapping("/{start}/**/{end}")
public String vv(@PathVariable("start") String start, @PathVariable("end") String end){
}
然而,我需要获得url中间的数据:
@RequestMapping("/{start}/{mid:.*}/{end}")
但是却无法捕获。
也就是说,变量中不能带有"/"的。
2.我的解决方案
1.'/'有限
如:
/123/456/789/1011/1213
/123/456/789/1011
/123/456/789
@RequestMapping(value={"/{start}/{mid1}/{mid2}/{mid3}/{end}",
"/{start}/{mid1.*}{mid2}/{mid3}/{end}",
"/{start}/{mid1.*}{mid2}{mid3}/{end}"}
)
public String vv(@PathVariable("start") String start,
@PathVariable("mid1") String mid1,
@PathVariable("mid2") String mid2,
@PathVariable("mid3") String mid3,
@PathVariable("end") String end){
if(StringUtils.isNotBlank(mid2){
mid1 +="/"+mid2;
}
if(StringUtils.isNotBlank(mid3){
mid1 +="/"+mid3;
}
//可以使用mid1了
......
}
{mid1:.*} 是最大匹配
url数组里的变量必须相等
2."/" 数量可能非常多
如:/search/123/4/5/6/7/4/5/6/5/4/4/5/5/67/ok
只能使用 @RequestMapping("/search/**/{end}") 来拦截住请求
然后代码里通过:
request.getServletPath()
然后通过split("/")来拆分后取对应的内容拼接。
3.其它人的解决方案
http://stackoverflow.com/questions/2334787/how-to-match-a-spring-requestmapping-having-a-pathvariable-containing?rq=1
http://stackoverflow.com/questions/3686808/spring-3-requestmapping-get-path-value
http://stackoverflow.com/questions/7841770/optional-path-variables-in-spring-mvc-requestmapping-uritemplate