在请求映射中的双星号含义是什么?

21

当一个请求映射中出现双星号时,这意味着什么?例如:

@RequestMapping(value = { "/", "/welcome**" }, method =
RequestMethod.GET)  public ModelAndView welcomePage() { ...
2个回答

32

一般来说,通配符中的星号(*)表示:

/welcome*:匹配以"/welcome"开头并在下一个"/"之前结束的URL路径或文件夹,例如/welcomePage

/welcome**:匹配以"/welcome"开头的任何URL路径,包括其子文件夹和子路径,例如/welcome/section2/section3//welcomePage/index

/welcome/*:匹配"/welcome"下的任何文件、文件夹或路径,例如/welcome/index

/welcome/**:匹配"/welcome"下的任何文件、文件夹、路径、子文件夹或子路径。

换句话说,一个星号(*)表示匹配到下一个"/"结束,两个星号(**)则没有限制。


1
  1. 蚂蚁路径

  2. 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接