diff --git a/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java b/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java index 750e60c25d2..a22c7b80210 100644 --- a/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java +++ b/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java @@ -175,6 +175,17 @@ public class PathPattern implements Comparable { return this.patternString; } + + /** + * Whether the pattern string contains pattern syntax that would require + * use of {@link #matches(PathContainer)}, or if it is a regular String that + * could be compared directly to others. + * @since 5.2 + */ + public boolean hasPatternSyntax() { + return this.score > 0 || this.patternString.indexOf('?') != -1; + } + /** * Whether this pattern matches the given path. * @param pathContainer the candidate path to attempt to match against diff --git a/spring-web/src/test/java/org/springframework/web/util/pattern/PathPatternTests.java b/spring-web/src/test/java/org/springframework/web/util/pattern/PathPatternTests.java index 5cc7c451e01..b35f7e20360 100644 --- a/spring-web/src/test/java/org/springframework/web/util/pattern/PathPatternTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/pattern/PathPatternTests.java @@ -57,6 +57,16 @@ public class PathPatternTests { assertEquals("[/][/][/]",elementsToString(toPathContainer("///").elements())); } + @Test + public void hasPatternSyntax() { + PathPatternParser parser = new PathPatternParser(); + assertTrue(parser.parse("/foo/*").hasPatternSyntax()); + assertTrue(parser.parse("/foo/**/bar").hasPatternSyntax()); + assertTrue(parser.parse("/f?o").hasPatternSyntax()); + assertTrue(parser.parse("/foo/{bar}/baz").hasPatternSyntax()); + assertFalse(parser.parse("/foo/bar").hasPatternSyntax()); + } + @Test public void matching_LiteralPathElement() { checkMatches("foo", "foo");