From cc05608ae9a1a33da2158612ed633067a1e3cbf6 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Thu, 20 Jun 2019 20:27:22 +0200 Subject: [PATCH] PathPattern does not use custom separator Prior to this commit, `PathPattern::extractPathWithinMapping` would always use the default path pattern separator `/` when extracting the path within the pattern of a matched route. This commit ensures that `PathPattern` uses the configured separator when extracting the path within the matched mapping. Fixes gh-23168 --- .../springframework/web/util/pattern/PathPattern.java | 2 +- .../web/util/pattern/PathPatternTests.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) 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 11b80df19c..d3a5a5d0d7 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 @@ -339,7 +339,7 @@ public class PathPattern implements Comparable { } } } - resultPath = PathContainer.parsePath(buf.toString()); + resultPath = PathContainer.parsePath(buf.toString(), String.valueOf(this.separator)); } else if (startIndex >= endIndex) { resultPath = PathContainer.parsePath(""); 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 2337f01be7..02782c5221 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 @@ -707,6 +707,17 @@ public class PathPatternTests { checkExtractPathWithinPattern("/", "//", ""); } + @Test + public void extractPathWithinPatternCustomSeparator() { + PathPatternParser ppp = new PathPatternParser(); + ppp.setSeparator('.'); + PathPattern pp = ppp.parse("test.**"); + PathContainer pathContainer = PathContainer.parsePath("test.projects..spring-framework", "."); + PathContainer result = pp.extractPathWithinPattern(pathContainer); + assertThat(result.value()).isEqualTo("projects.spring-framework"); + assertThat(result.elements()).hasSize(3); + } + @Test public void extractUriTemplateVariables_spr15264() { PathPattern pp;