org.springframework.util

## Interface PathMatcher

All Known Implementing Classes:
  AntPathMatcher

    public interface PathMatcher

Strategy interface for `String`-based path matching.

Used by `PathMatchingResourcePatternResolver`, `AbstractUrlHandlerMapping`, `PropertiesMethodNameResolver`, and `WebContentInterceptor`.

The default implementation is `AntPathMatcher`, supporting the Ant-style pattern syntax.

Since:
  1.2
Author:
  Juergen Hoeller
See Also:
  `AntPathMatcher`

### Method Summary

Methods
`String` `combine(String pattern1, String pattern2)` Combines two patterns into a new pattern that is returned.
`String` `extractPathWithinPattern(String pattern, String path)` Given a pattern and a full path, determine the pattern-mapped part.
`Map<String,String>` `extractUriTemplateVariables(String pattern, String path)` Given a pattern and a full path, extract the URI template variables.
`Comparator<String>` `getPatternComparator(String path)` Given a full path, returns a `Comparator` suitable for sorting patterns in order of explicitness for that path.
`boolean` `isPattern(String path)` Does the given `path` represent a pattern that can be matched by an implementation of this interface?
`boolean` `match(String pattern, String path)` Match the given `path` against the given `pattern`, according to this PathMatcher's matching strategy.
`boolean` `matchStart(String pattern, String path)` Match the given `path` against the corresponding part of the given `pattern`, according to this PathMatcher's matching strategy.

### Method Detail

#### isPattern

    boolean isPattern(String path)

Does the given `path` represent a pattern that can be matched by an implementation of this interface?

If the return value is `false`, then the `match(java.lang.String, java.lang.String)` method does not have to be used because direct equality comparisons on the static path Strings will lead to the same result.

Parameters:
  `path` - the path String to check
Returns:
  `true` if the given `path` represents a pattern

#### match

    boolean match(String pattern,
                String path)

Match the given `path` against the given `pattern`, according to this PathMatcher's matching strategy.

Parameters:
  `pattern` - the pattern to match against
  `path` - the path String to test
Returns:
  `true` if the supplied `path` matched, `false` if it didn't

#### matchStart

    boolean matchStart(String pattern,
                     String path)

Match the given `path` against the corresponding part of the given `pattern`, according to this PathMatcher's matching strategy.

Determines whether the pattern at least matches as far as the given base path goes, assuming that a full path may then match as well.

Parameters:
  `pattern` - the pattern to match against
  `path` - the path String to test
Returns:
  `true` if the supplied `path` matched, `false` if it didn't

#### extractPathWithinPattern

    String extractPathWithinPattern(String pattern,
                                  String path)

Given a pattern and a full path, determine the pattern-mapped part.

This method is supposed to find out which part of the path is matched dynamically through an actual pattern, that is, it strips off a statically defined leading path from the given full path, returning only the actually pattern-matched part of the path.

For example: For "myroot/*.html" as pattern and "myroot/myfile.html" as full path, this method should return "myfile.html". The detailed determination rules are specified to this PathMatcher's matching strategy.

A simple implementation may return the given full path as-is in case of an actual pattern, and the empty String in case of the pattern not containing any dynamic parts (i.e. the `pattern` parameter being a static path that wouldn't qualify as an actual `pattern`). A sophisticated implementation will differentiate between the static parts and the dynamic parts of the given path pattern.

Parameters:
  `pattern` - the path pattern
  `path` - the full path to introspect
Returns:
  the pattern-mapped part of the given `path` (never `null`)

#### extractUriTemplateVariables

    Map<String,String> extractUriTemplateVariables(String pattern,
                                                 String path)

Given a pattern and a full path, extract the URI template variables. URI template variables are expressed through curly brackets ('{' and '}').

For example: For pattern "/hotels/{hotel}" and path "/hotels/1", this method will return a map containing "hotel"->"1".

Parameters:
  `pattern` - the path pattern, possibly containing URI templates
  `path` - the full path to extract template variables from
Returns:
  a map, containing variable names as keys; variables values as values

#### getPatternComparator

    Comparator<String> getPatternComparator(String path)

Given a full path, returns a `Comparator` suitable for sorting patterns in order of explicitness for that path.

The full algorithm used depends on the underlying implementation, but generally, the returned `Comparator` will sort a list so that more specific patterns come before generic patterns.

Parameters:
  `path` - the full path to use for comparison
Returns:
  a comparator capable of sorting patterns in order of explicitness

#### combine

    String combine(String pattern1,
                 String pattern2)

Combines two patterns into a new pattern that is returned.

The full algorithm used for combining the two pattern depends on the underlying implementation.

Parameters:
  `pattern1` - the first pattern
  `pattern2` - the second pattern
Returns:
  the combination of the two patterns
Throws:
  `IllegalArgumentException` - when the two patterns cannot be combined