Improvement in AntPathMatcher.combine method

Issues: SPR-7970
This commit is contained in:
Rossen Stoyanchev 2012-04-02 15:06:20 -04:00
parent 4653dbe73f
commit 9833a4c385
2 changed files with 11 additions and 8 deletions

View File

@ -299,7 +299,9 @@ public class AntPathMatcher implements PathMatcher {
else if (!StringUtils.hasText(pattern2)) { else if (!StringUtils.hasText(pattern2)) {
return pattern1; return pattern1;
} }
else if (!pattern1.contains("{") && match(pattern1, pattern2)) { else if (!pattern1.equals(pattern2) && !pattern1.contains("{") && match(pattern1, pattern2)) {
// /* + /hotel -> /hotel ; "/*.*" + "/*.html" -> /*.html
// However /user + /user -> /usr/user ; /{foo} + /bar -> /{foo}/bar
return pattern2; return pattern2;
} }
else if (pattern1.endsWith("/*")) { else if (pattern1.endsWith("/*")) {

View File

@ -348,13 +348,13 @@ public class AntPathMatcherTests {
assertEquals("com.example", result.get("symbolicName")); assertEquals("com.example", result.get("symbolicName"));
assertEquals("1.0.0", result.get("version")); assertEquals("1.0.0", result.get("version"));
} }
// SPR-7787 // SPR-7787
@Test @Test
public void extractUriTemplateVarsRegexQualifiers() { public void extractUriTemplateVarsRegexQualifiers() {
Map<String, String> result = pathMatcher.extractUriTemplateVariables( Map<String, String> result = pathMatcher.extractUriTemplateVariables(
"{symbolicName:[\\p{L}\\.]+}-sources-{version:[\\p{N}\\.]+}.jar", "{symbolicName:[\\p{L}\\.]+}-sources-{version:[\\p{N}\\.]+}.jar",
"com.example-sources-1.0.0.jar"); "com.example-sources-1.0.0.jar");
assertEquals("com.example", result.get("symbolicName")); assertEquals("com.example", result.get("symbolicName"));
assertEquals("1.0.0", result.get("version")); assertEquals("1.0.0", result.get("version"));
@ -376,18 +376,18 @@ public class AntPathMatcherTests {
} }
// SPR-8455 // SPR-8455
@Test @Test
public void extractUriTemplateVarsRegexCapturingGroups() { public void extractUriTemplateVarsRegexCapturingGroups() {
try { try {
pathMatcher.extractUriTemplateVariables("/web/{id:foo(bar)?}", "/web/foobar"); pathMatcher.extractUriTemplateVariables("/web/{id:foo(bar)?}", "/web/foobar");
fail("Expected exception"); fail("Expected exception");
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
assertTrue("Expected helpful message on the use of capturing groups", assertTrue("Expected helpful message on the use of capturing groups",
e.getMessage().contains("The number of capturing groups in the pattern")); e.getMessage().contains("The number of capturing groups in the pattern"));
} }
} }
@Test @Test
public void combine() { public void combine() {
assertEquals("", pathMatcher.combine(null, null)); assertEquals("", pathMatcher.combine(null, null));
@ -410,7 +410,8 @@ public class AntPathMatcherTests {
assertEquals("/*.html", pathMatcher.combine("/**", "/*.html")); assertEquals("/*.html", pathMatcher.combine("/**", "/*.html"));
assertEquals("/*.html", pathMatcher.combine("/*", "/*.html")); assertEquals("/*.html", pathMatcher.combine("/*", "/*.html"));
assertEquals("/*.html", pathMatcher.combine("/*.*", "/*.html")); assertEquals("/*.html", pathMatcher.combine("/*.*", "/*.html"));
assertEquals("/{foo}/bar", pathMatcher.combine("/{foo}", "/bar")); assertEquals("/{foo}/bar", pathMatcher.combine("/{foo}", "/bar")); // SPR-8858
assertEquals("/user/user", pathMatcher.combine("/user", "/user")); // SPR-7970
} }
@Test @Test