路径变量中使用正则表达式匹配

来源:互联网 发布:照片大小调整软件 编辑:程序博客网 时间:2024/06/05 02:57

路径变量中使用正则表达式匹配

SpringMVC的处理器映射的请求路径中是可以包含路径变量的,语法是{pathVar},如下面的请求路径映射中就定义了一个路径变量var,则在访问时该变量可以是任意的值,所以在请求时/pathvariable/apathvariable/bcd等形式的请求路径都可以映射到下面的处理器方法。

@RequestMapping("/pathvariable/{var}")public Object testPathVar() {    return "PathVar";}

如果有需要,我们还可以通过一个方法参数接收实际访问过程中传递的该路径变量,需要在对应的方法参数上使用@PathVariable标注,如果路径变量的名称和定义的方法参数的名称是一致的,则通常可以不通过@PathVariable的value属性指定方法参数对应的路径变量的名称;如果方法参数的名称和对应的路径变量的名称不一致,则必须如下所示通过@PathVariable的value属性指定对应的路径变量名称。

@RequestMapping("/pathvariable/{var}")public Object testPathVar(@PathVariable("var") String pathVar) {    return pathVar;}

通过方法参数接收的路径变量还会自动的添加到对应的Model中,所以如果上面的示例代码中返回的是一个页面,则我们还可以在对应的页面中通过路径变量名称var获取到传递的实际的路径变量值。

以上介绍的是普通的路径变量使用的方式,它对传递的具体的路径变量值没有什么约束,试想一下,如果我们明确的知道上面的路径变量var的取值只能是小写字母的组合,那么当我们传递的路径变量是abc时是满足我们需求的,可以进入该方法处理,但是当我们传递的路径变量是abc123是不满足我们需求的,这时候也会进入我们的处理方法。虽然我们也可以在我们的处理方法中对路径变量进行校验,但是这明显不是很好的做法,因为严格意义上来说这时候就不应该进入我们的处理器方法。针对这种场景SpringMVC为我们提供了路径变量的正则表达式限定,即允许我们在定义路径变量时指定其需要满足的正则表达式要求,此时只有满足对应正则表达式要求的路径变量才能映射到对应的处理器方法处理。其语法是{varName:regex},varName指定路径变量名,regex定义需要匹配的正则表达式。在下面的示例中只有当我们传递的路径变量regex1是完全由小写字母a-z组成,并且路径变量regex2是由3位的数字组成时才会被映射到下面的处理器方法。比如/pathvariable/a/123是可以映射到下面的处理器方法的,而/pathvariable/a/12a则不能映射到下面的处理器方法。

@RequestMapping("/pathvariable/{regex1:[a-z]}/{regex2:\\d{3}}")public Object testPathVariableRegex(@PathVariable String regex1, @PathVariable String regex2) {    Map<String, Object> result = new HashMap<>();    result.put("regex1", regex1);    result.put("regex2", regex2);    return result;}

如果是上面那样,因为我们已经明确的指定了路径变量regex2需要是3位的数字,所以在方法参数中接收该路径变量时可以把regex2声明为数字类型的,比如下面这样。

@RequestMapping("/pathvariable/{regex1:[a-z]}/{regex2:\\d{3}}")public Object testPathVariableRegex(@PathVariable String regex1, @PathVariable int regex2) {    Map<String, Object> result = new HashMap<>();    result.put("regex1", regex1);    result.put("regex2", regex2);    return result;}

(注:本文是基于Spring4.1.0所写)

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 冶金超声波振动筛 冶金有限公司 昆明冶金大学 冶金工程收入年薪多少 中南大学粉末冶金研究院 古冶大铁二铁是逮捕了吗 唐山古冶黑道大铁二铁 冶山道院 冷排 胃冷 冷靴 冷切 冷泡 冷感 冷精 冷酒 冷斑 冷粉 冷吃 冷冷清清 冷冷 太冷 下冷 冷冷冷 冷图片 冷的图片 惹上冷殿下 冷组词 霸气高冷短句 冷暴力 冷拼音 林语嫣冷爵枭全文目录 慕天星冷冽 我绝美冷艳总裁 高冷男神住隔壁 冷王毒宠医妃 冷的拼音 冷再生 冷翡翠 冷兔神仙道