From afc0ae3752ae29a6fd724cfc79cdc428ea1bfa83 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 13 May 2019 18:05:24 -0400 Subject: [PATCH] Add hasPatternSyntax method to PathPattern --- .../springframework/web/util/pattern/PathPattern.java | 11 +++++++++++ .../web/util/pattern/PathPatternTests.java | 10 ++++++++++ 2 files changed, 21 insertions(+) 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");