Add section on path pattern comparison
Issue: SPR-10576
This commit is contained in:
@@ -28862,12 +28862,37 @@ name and the second - the regular expression.For example:
|
||||
[[mvc-ann-requestmapping-patterns]]
|
||||
===== Path Patterns
|
||||
In addition to URI templates, the `@RequestMapping` annotation also supports Ant-style
|
||||
path patterns (for example, `/myPath/*.do`). A combination of URI templates and
|
||||
Ant-style globs is also supported (for example, `/owners/*/pets/{petId}`).
|
||||
path patterns (for example, `/myPath/*.do`). A combination of URI template variables and
|
||||
Ant-style globs is also supported (e.g. `/owners/*/pets/{petId}`).
|
||||
|
||||
|
||||
[[mvc-ann-requestmapping-pattern-comparison]]
|
||||
===== Path Pattern Comparison
|
||||
When a URL matches multiple patterns, a sort is used to find the most specific match.
|
||||
|
||||
A pattern with a lower count of URI variables and wild cards is considered more specific.
|
||||
For example `/hotels/{hotel}/*` has 1 URI variable and 1 wild card and is considered
|
||||
more specific than `/hotels/{hotel}/**` which as 1 URI variable and 2 wild cards.
|
||||
|
||||
If two patterns have the same count, the one that is longer is considered more specific.
|
||||
For example `/foo/bar*` is longer and considered more specific than `/foo/*`.
|
||||
|
||||
When two patterns have the same count and length, the pattern with fewer wild cards is considered more specific.
|
||||
For example `/hotels/{hotel}` is more specific than `/hotels/*`.
|
||||
|
||||
There are also some additional special rules:
|
||||
|
||||
* The *default mapping pattern* `/**` is less specific than any other pattern.
|
||||
For example `/api/{a}/{b}/{c}` is more specific.
|
||||
* A *prefix pattern* such as `/public/**` is less specific than any other pattern that doesn't contain double wildcards.
|
||||
For example `/public/path3/{a}/{b}/{c}` is more specific.
|
||||
|
||||
For the full details see `AntPatternComparator` in `AntPathMatcher`. Note that the PathMatcher
|
||||
can be customized (see <<mvc-config-path-matching>> in the section on configuring Spring MVC).
|
||||
|
||||
|
||||
[[mvc-ann-requestmapping-placeholders]]
|
||||
===== Patterns with Placeholders
|
||||
===== Path Patterns with Placeholders
|
||||
Patterns in `@RequestMapping` annotations support ${...} placeholders against local
|
||||
properties and/or system properties and environment variables. This may be useful in
|
||||
cases where the path a controller is mapped to may need to be customized through
|
||||
@@ -28876,8 +28901,8 @@ configuration. For more information on placeholders, see the javadocs of the
|
||||
|
||||
|
||||
|
||||
[[mvc-ann-requestmapping-uri-vars-and-file-extensions]]
|
||||
===== URI Variables and Suffix Patterns Matching
|
||||
[[mvc-ann-requestmapping-suffix-pattern-match]]
|
||||
===== Path Pattern Matching By Suffix
|
||||
By default Spring MVC automatically performs `".*"` suffix pattern matching so
|
||||
that a controller mapped to `/person` is also implicitly mapped to `/person.*`.
|
||||
This allows indicating content types via file extensions, e.g. `/person.pdf`,
|
||||
|
||||
Reference in New Issue
Block a user