Skip to content

Commit 57f868f

Browse files
committed
Direct matches by URL path work again
This commit fixes a recent regression as a result of 5225a57 with the determination of non-pattern vs pattern URLs. That in turn affects the ability to perform direct matches by URL path. There is also a fix in PathPattern to recognize "catch-all" patterns as pattern syntax. See gh-24945
1 parent 7e71749 commit 57f868f

File tree

6 files changed

+17
-5
lines changed

6 files changed

+17
-5
lines changed

spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public String getPatternString() {
190190
* @since 5.2
191191
*/
192192
public boolean hasPatternSyntax() {
193-
return (this.score > 0 || this.patternString.indexOf('?') != -1);
193+
return (this.score > 0 || this.catchAll || this.patternString.indexOf('?') != -1);
194194
}
195195

196196
/**

spring-web/src/test/java/org/springframework/web/util/pattern/PathPatternTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ public void pathContainer() {
5454
public void hasPatternSyntax() {
5555
PathPatternParser parser = new PathPatternParser();
5656
assertThat(parser.parse("/foo/*").hasPatternSyntax()).isTrue();
57-
assertThat(parser.parse("/foo/**").hasPatternSyntax()).isFalse();
58-
assertThat(parser.parse("/foo/{*elem}").hasPatternSyntax()).isFalse();
57+
assertThat(parser.parse("/foo/**").hasPatternSyntax()).isTrue();
58+
assertThat(parser.parse("/foo/{*elem}").hasPatternSyntax()).isTrue();
5959
assertThat(parser.parse("/f?o").hasPatternSyntax()).isTrue();
6060
assertThat(parser.parse("/f*").hasPatternSyntax()).isTrue();
6161
assertThat(parser.parse("/foo/{bar}/baz").hasPatternSyntax()).isTrue();

spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestCondition.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public Set<String> getDirectPaths() {
129129
}
130130
Set<String> result = Collections.emptySet();
131131
for (PathPattern pattern : this.patterns) {
132-
if (pattern.hasPatternSyntax()) {
132+
if (!pattern.hasPatternSyntax()) {
133133
result = (result.isEmpty() ? new HashSet<>(1) : result);
134134
result.add(pattern.getPatternString());
135135
}

spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PatternsRequestCondition.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ public Set<String> getDirectPaths() {
218218
}
219219
Set<String> result = Collections.emptySet();
220220
for (String pattern : this.patterns) {
221-
if (this.pathMatcher.isPattern(pattern)) {
221+
if (!this.pathMatcher.isPattern(pattern)) {
222222
result = (result.isEmpty() ? new HashSet<>(1) : result);
223223
result.add(pattern);
224224
}

spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestConditionTests.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ void prependNonEmptyPatternsOnly() {
4848
.isEqualTo("");
4949
}
5050

51+
@Test
52+
void getDirectUrls() {
53+
PathPatternsRequestCondition condition = createCondition("/something", "/else/**");
54+
assertThat(condition.getDirectPaths()).containsExactly("/something");
55+
}
56+
5157
@Test
5258
void combineEmptySets() {
5359
PathPatternsRequestCondition c1 = createCondition();

spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/condition/PatternsRequestConditionTests.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ void prependNonEmptyPatternsOnly() {
4747
.isEqualTo("");
4848
}
4949

50+
@Test
51+
void getDirectUrls() {
52+
PatternsRequestCondition condition = new PatternsRequestCondition("/something", "/else/**");
53+
assertThat(condition.getDirectPaths()).containsExactly("/something");
54+
}
55+
5056
@Test
5157
void combineEmptySets() {
5258
PatternsRequestCondition c1 = new PatternsRequestCondition();

0 commit comments

Comments
 (0)