SpringMVC路径匹配中使用通配符
@RequestMapping中指定的路径也可以使用通配符*
表示任意字符。如下的处理器方法可以映射请求/antstyle/a,可以映射请求/antstyle/b,但是它不能映射请求请求/antstyle/a/b,因为它只能映射一级路径。
@RequestMapping("/antstylebcd")
public Object testAntStyle() {
return "antStyle";
}
通配符还可以匹配以某字符结束的路径
如下处理器方法可以映射/antstyle/后路径以bcd结尾的路径,比如/antstyle/abcd、/antstyle/bcd等。
@RequestMapping("/antstyle**")
public Object testAntStyle() {
return "antStyle";
}
请求映射路径中使用了通配符时,也还是可使用路径变量的,它们是相互独立的。如下代码中我们就在请求路径中同时使用了路径变量和通配符。
@RequestMapping("/antstylewithpathvariable/*/{path}/abc")
public Object testAntStyleWithPathVariable(@PathVariable String path) {
return "ant style with path variable, path is " + path;
}
同时存在路径变量和通配符匹配时的优先级关系
当一个请求路径可以匹配多个处理器方法时,SpringMVC将优先匹配路径映射更精确的那个。
- 拥有更少的路径变量和通配符的路径映射更精确。比如/hotels/{hotel}/*拥有一个路径变量和一个通配符,那么它会比/hotels/{hotel}/**更精确,会优先匹配,因为后者拥有一个路径变量和两个通配符。
- 如果两个路径映射的通配符数量是一样的,则指定的信息更多那个路径会更精确,比如/hotels/abc*比/hotels/*更精确。
- 路径变量比通配符更精确。比如/hotels/{hotel}比/hotels/*更精确。
- 默认映射/**比其它所有的路径映射的优先级都低,比如/{a}/{b}就比它更精确。
- 拥有两个通配符的路径映射比其它没有两个通配符的路径映射的优先级都低,比如/abc/**的优先级低于/abc/{a}。
(注:本文是基于Spring4.1.0所写)
请求路径参数使用正则表达式
@GetMapping("/user/{id:\\d+}") //使用正则指定Id为数字
public User getInfo(@PathVariable String id){
...
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。