Method level only, empty RequestMapping matches "" and "/"
Closes gh-30293
This commit is contained in:
@@ -89,8 +89,12 @@ public final class PatternsRequestCondition extends AbstractRequestCondition<Pat
|
||||
return " || ";
|
||||
}
|
||||
|
||||
private boolean isEmptyPathMapping() {
|
||||
return this.patterns == EMPTY_PATH_PATTERN;
|
||||
/**
|
||||
* Whether the condition is the "" (empty path) mapping.
|
||||
* @since 6.0.10
|
||||
*/
|
||||
public boolean isEmptyPathMapping() {
|
||||
return (this.patterns == EMPTY_PATH_PATTERN);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2022 the original author or authors.
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -153,6 +153,9 @@ public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMappi
|
||||
if (typeInfo != null) {
|
||||
info = typeInfo.combine(info);
|
||||
}
|
||||
if (info.getPatternsCondition().isEmptyPathMapping()) {
|
||||
info = info.mutate().paths("", "/").options(this.config).build();
|
||||
}
|
||||
for (Map.Entry<String, Predicate<Class<?>>> entry : this.pathPrefixes.entrySet()) {
|
||||
if (entry.getValue().test(handlerType)) {
|
||||
String prefix = entry.getKey();
|
||||
|
||||
@@ -61,6 +61,17 @@ class RequestMappingIntegrationTests extends AbstractRequestMappingIntegrationTe
|
||||
}
|
||||
|
||||
|
||||
@ParameterizedHttpServerTest // gh-30293
|
||||
void emptyMapping(HttpServer httpServer) throws Exception {
|
||||
startServer(httpServer);
|
||||
|
||||
String url = "http://localhost:" + this.port;
|
||||
assertThat(getRestTemplate().getForObject(url, String.class)).isEqualTo("root");
|
||||
|
||||
url += "/";
|
||||
assertThat(getRestTemplate().getForObject(url, String.class)).isEqualTo("root");
|
||||
}
|
||||
|
||||
@ParameterizedHttpServerTest
|
||||
void httpHead(HttpServer httpServer) throws Exception {
|
||||
startServer(httpServer);
|
||||
@@ -106,6 +117,11 @@ class RequestMappingIntegrationTests extends AbstractRequestMappingIntegrationTe
|
||||
@SuppressWarnings("unused")
|
||||
private static class TestRestController {
|
||||
|
||||
@GetMapping
|
||||
public String get() {
|
||||
return "root";
|
||||
}
|
||||
|
||||
@GetMapping("/text")
|
||||
public String textGet() {
|
||||
return "Foo";
|
||||
|
||||
Reference in New Issue
Block a user