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 bdada060507e..b00bf47632eb 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 @@ -397,6 +397,15 @@ else if (!StringUtils.hasLength(pattern2string.patternString)) { this.patternString.substring(0, this.patternString.length() - 2), pattern2string.patternString)); } + + if (this.patternString.endsWith("/*")) { + String base = this.patternString.substring(0, this.patternString.length() - 2); + if (pattern2string.patternString.contains("/")) { + throw new IllegalArgumentException("Cannot combine single-segment wildcard '/*' with multi-segment path '" + + pattern2string.patternString + "'"); + } + return this.parser.parse(concat(base, "/" + pattern2string.patternString)); + } // /hotels + /booking => /hotels/booking // /hotels + booking => /hotels/booking 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 24fc6d571df3..146e7fe5070f 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 @@ -32,6 +32,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; +import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * Exercise matching of {@link PathPattern} objects.