当一个请求映射中出现双星号时,这意味着什么?例如:
@RequestMapping(value = { "/", "/welcome**" }, method =
RequestMethod.GET) public ModelAndView welcomePage() { ...
当一个请求映射中出现双星号时,这意味着什么?例如:
@RequestMapping(value = { "/", "/welcome**" }, method =
RequestMethod.GET) public ModelAndView welcomePage() { ...
一般来说,通配符中的星号(*)表示:
/welcome*
:匹配以"/welcome"
开头并在下一个"/"
之前结束的URL路径或文件夹,例如/welcomePage
。
/welcome**
:匹配以"/welcome"
开头的任何URL路径,包括其子文件夹和子路径,例如/welcome/section2/section3/
或/welcomePage/index
。
/welcome/*
:匹配"/welcome"
下的任何文件、文件夹或路径,例如/welcome/index
。
/welcome/**
:匹配"/welcome"
下的任何文件、文件夹、路径、子文件夹或子路径。
换句话说,一个星号(*)表示匹配到下一个"/"
结束,两个星号(**)则没有限制。
URL映射排序。来自Spring文档:
当一个URL匹配多个模式时,使用排序来找到最具体的匹配。
具有较少URI变量和通配符计数的模式被认为更具体。例如,/hotels/{hotel}/*具有1个URI变量和1个通配符,比/hotels/{hotel}/**更具体,后者具有1个URI变量和2个通配符。
...
还有一些额外的特殊规则:
- 默认映射模式/** 比任何其他模式都不具体。例如/api/{a}/{b}/{c} 更具体。
- 前缀模式,如/public/** 比不包含双通配符的任何其他模式都不具体。例如/public/path3/{a}/{b}/{c} 更具体。
/welcome**
和/welcome*
的情况下有什么区别呢?在这两种情况下,路径/welcome/ftp
或/welcome/ftp/index
都是非法的。 - rozerro**
表示零个或多个字符,其中也可以包含路径分隔符/
。因此,我敢打赌它可以用于所提到的路径,但是/welcome/**
可能更好。 - luboskrnac