路径匹配规则之/和/*和/**
时间: 2023-09-02 15:13:40 浏览: 250
在路径匹配规则中,/、*和/**是比较常见的三种匹配方式,它们分别代表了不同的匹配规则。
/是精确匹配,表示匹配URL路径中的一级路径。例如,/user表示匹配路径为/user的请求,但不会匹配/user/detail这样的请求。
*是通配符匹配,表示匹配URL路径中的任意内容(除了路径分隔符/)。例如,/user/*可以匹配所有以/user/开头的请求,包括/user/detail、/user/list等等。
/**也是通配符匹配,但是它可以匹配URL路径中的任意内容,包括路径分隔符/。例如,/user/**可以匹配所有以/user/开头的请求,包括/user/detail、/user/list以及/user/detail/info等等。
需要注意的是,路径匹配规则会按照优先级进行匹配,一般来说精确匹配的优先级最高,其次是/**,最后是*。因此,如果同时存在多个匹配规则,需要注意规则的顺序。
总的来说,/、*和/**是路径匹配规则中比较常见的三种匹配方式,可以根据具体的应用场景选择合适的规则。
相关问题
有模式集合["/a/b/**","/a/**"],路径/a/b/c进行PathMatcher匹配,怎么做到只返回/a/b/**
你可以使用Ant风格的通配符来进行路径匹配,其中 `**` 表示任意多级子路径,`*` 表示任意单级子路径。在这个问题中,你可以使用路径匹配器 PathMatcher.match() 方法进行匹配,传入你的模式集合和待匹配的路径 `/a/b/c`,该方法会返回一个匹配的 PathMatcher.MatchResult 对象,你可以通过该对象的 getPattern() 方法来获取匹配的模式。
根据Ant风格的通配符匹配规则,`/a/b/**` 可以匹配 `/a/b/c`,而 `/a/**` 也可以匹配 `/a/b/c`,因此两个模式都可以匹配待匹配路径 `/a/b/c`。但是根据匹配优先级的规则,更具体的模式优先匹配,因此应该返回 `/a/b/**`。
所以,你可以通过 PathMatcher.match("/a/b/c", "/a/b/**", "/a/**") 方法来进行匹配,并且返回值应该是 `/a/b/**`。
路径/*和/**有什么区别
在Spring中,路径`/*`和`/**`的区别主要在于匹配规则和优先级。
`/*`匹配规则是只匹配一级路径,而`/**`匹配规则是匹配多级路径。
例如,`/user/*`只能匹配/user/后面再加一个路径,如/user/123,但是不能匹配/user/123/456这样的路径,而`/user/**`可以匹配/user/后面任意级别的路径。
另外,`/*`的优先级比`/**`高,如果有一个请求路径既可以匹配`/*`又可以匹配`/**`,那么会优先匹配`/*`。
需要注意的是,如果使用`/**`匹配所有请求路径,会对性能造成一定的影响,因为它会匹配所有的请求路径。因此,最好根据实际情况选择合适的路径匹配规则。
阅读全文