SpringMVC路径匹配中使⽤通配符问题
⽬录
SpringMVC路径匹配中使⽤通配符
@RequestMapping中指定的路径也可以使⽤通配符*
通配符不是只能放在最后的
通配符还可以匹配以某字符结束的路径
通配符还可以匹配以某字符开始的路径
同时存在路径变量和通配符匹配时的优先级关系
请求路径参数使⽤正则表达式
SpringMVC路径匹配中使⽤通配符
@RequestMapping中指定的路径也可以使⽤通配符*
表⽰任意字符。如下的处理器⽅法可以映射请求/antstyle/a,可以映射请求/antstyle/b,但是它不能映射请求请
求/antstyle/a/b,因为它只能映射⼀级路径。
springmvc考试选择题@RequestMapping("/antstyle/*")
public Object testAntStyle() {
return "antStyle";
}
通配符不是只能放在最后的
它也可以放在其它位置。下⾯的⽰例中就是把通配符放在中间位置,它可以映射请求/antstyle/a/bcd,也可以映射请
求/antstyle/ab/bcd。
@RequestMapping("/antstyle/*/bcd")
public Object testAntStyle() {
return "antStyle";
}
通配符还可以匹配以某字符结束的路径
如下处理器⽅法可以映射/antstyle/后路径以bcd结尾的路径,⽐如/antstyle/abcd、/antstyle/bcd等。
@RequestMapping("/antstyle/*bcd")
public Object testAntStyle() {
return "antStyle";
}
通配符还可以匹配以某字符开始的路径
如下处理器⽅法可以映射/antstyle/abc、/antstyle/abcd等。
@RequestMapping("/antstyle/abc*")
public Object testAntStyle() {
return "antStyle";
}
⼀个星号只能匹配⼀级路径,如果需要匹配任意的多级路径则可以使⽤两个星号。如下处理器⽅法可以映射任何请求路径
以/antstyle/开头的请求,如/antstyle/a、/antstyle/a/b等。
@RequestMapping("/antstyle/**")
public Object testAntStyle() {
return "antStyle";
}
⼀个星号与两个星号还可以⼀起使⽤,此时⼀个星号还是匹配任意字符,但是只能在当前层级,⽽两个星号还是可以匹配任意的层级,所以如下可以匹配/antstyle/abca/xxx/xxx等。
@RequestMapping("/antstyle/abc*/**")
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){
...
}
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论