
SpringMVC的处理器映射的请求模式中是可以包括路径函数的,语法是{pathVar},如上面的请求模式映射中就定义了一个路径函数var,则在访问时该变量可以是任意的值,所以在请求时/pathvariable/a、pathvariable/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所写)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-121361-1.html
我去你能在恶心我吗