提交 57d327d1 编写于 作者: R Rossen Stoyanchev

SPR-8255

上级 9c65973b
......@@ -26,6 +26,7 @@ import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.springframework.util.PathMatcher;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.method.condition.RequestCondition;
......@@ -92,7 +93,7 @@ public final class RequestKey {
}
Set<String> result = new LinkedHashSet<String>(patterns.size());
for (String pattern : patterns) {
if (!pattern.startsWith("/")) {
if (StringUtils.hasLength(pattern) && !pattern.startsWith("/")) {
pattern = "/" + pattern;
}
result.add(pattern);
......@@ -169,9 +170,9 @@ public final class RequestKey {
* <ul>
* <li>URL patterns:
* <ul>
* <li>If both keys have path patterns combine them according to the rules of the given {@link PathMatcher}.
* <li>If either key contains path patterns but not both use only what is available.
* <li>If neither key contains path patterns use "/".
* <li>If both have patterns combine them according to the rules of the given {@link PathMatcher}
* <li>If either contains patterns, but not both, use the available pattern
* <li>If neither contains patterns use ""
* </ul>
* <li>HTTP methods are combined as union of all HTTP methods listed in both keys.
* <li>Request parameter are combined into a logical AND.
......@@ -198,8 +199,8 @@ public final class RequestKey {
Set<String> result = new LinkedHashSet<String>();
if (!typePatterns.isEmpty() && !methodPatterns.isEmpty()) {
for (String pattern1 : typePatterns) {
for (String p2 : methodPatterns) {
result.add(pathMatcher.combine(pattern1, p2));
for (String pattern2 : methodPatterns) {
result.add(pathMatcher.combine(pattern1, pattern2));
}
}
}
......
......@@ -123,7 +123,7 @@ public class ServletInvocableHandlerMethod extends InvocableHandlerMethod {
webRequest.getResponse().sendError(this.responseStatus.value(), this.responseReason);
}
else {
webRequest.getResponse().sendError(this.responseStatus.value());
webRequest.getResponse().setStatus(this.responseStatus.value());
}
// to be picked up by the RedirectView
......
......@@ -77,9 +77,13 @@ public class RequestKeyTests {
key1 = createKeyFromPatterns();
key2 = createKeyFromPatterns();
key3 = createKeyFromPatterns("/");
key3 = createKeyFromPatterns("");
assertEquals(key3.getPatterns(), key1.combine(key2, pathMatcher).getPatterns());
key1 = createKeyFromPatterns("/t1");
key2 = createKeyFromPatterns("");
key3 = createKeyFromPatterns("/t1");
assertEquals(key3.getPatterns(), key1.combine(key2, pathMatcher).getPatterns());
}
@Test
......
......@@ -60,12 +60,15 @@ public class RequestMappingHandlerMethodMappingTests {
private HandlerMethod barMethod;
private HandlerMethod emptyMethod;
@Before
public void setUp() throws Exception {
handler = new Handler();
fooMethod = new HandlerMethod(handler, "foo");
fooParamMethod = new HandlerMethod(handler, "fooParam");
barMethod = new HandlerMethod(handler, "bar");
emptyMethod = new HandlerMethod(handler, "empty");
StaticApplicationContext context = new StaticApplicationContext();
context.registerSingleton("handler", handler.getClass());
......@@ -88,6 +91,17 @@ public class RequestMappingHandlerMethodMappingTests {
assertEquals(barMethod.getMethod(), hm.getMethod());
}
@Test
public void emptyPathMatch() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest("GET", "");
HandlerMethod hm = (HandlerMethod) mapping.getHandler(request).getHandler();
assertEquals(emptyMethod.getMethod(), hm.getMethod());
request = new MockHttpServletRequest("GET", "/");
hm = (HandlerMethod) mapping.getHandler(request).getHandler();
assertEquals(emptyMethod.getMethod(), hm.getMethod());
}
// TODO: SPR-8247
@Ignore
@Test
......@@ -144,6 +158,7 @@ public class RequestMappingHandlerMethodMappingTests {
@SuppressWarnings("unused")
@Controller
@RequestMapping
private static class Handler {
@RequestMapping(value = "/foo", method = RequestMethod.GET)
......@@ -157,6 +172,10 @@ public class RequestMappingHandlerMethodMappingTests {
@RequestMapping(value = "/ba*", method = { RequestMethod.GET, RequestMethod.HEAD })
public void bar() {
}
@RequestMapping(value = "")
public void empty() {
}
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册