SPR-8819 Fix issue in setting best matching pattern.
This commit is contained in:
parent
b9a3d4577a
commit
c3f0f31243
|
|
@ -85,10 +85,11 @@ public abstract class RequestMappingInfoHandlerMapping extends AbstractHandlerMe
|
||||||
protected void handleMatch(RequestMappingInfo info, String lookupPath, HttpServletRequest request) {
|
protected void handleMatch(RequestMappingInfo info, String lookupPath, HttpServletRequest request) {
|
||||||
super.handleMatch(info, lookupPath, request);
|
super.handleMatch(info, lookupPath, request);
|
||||||
|
|
||||||
String pattern = info.getPatternsCondition().getPatterns().iterator().next();
|
Set<String> patterns = info.getPatternsCondition().getPatterns();
|
||||||
request.setAttribute(BEST_MATCHING_PATTERN_ATTRIBUTE, pattern);
|
String bestPattern = patterns.isEmpty() ? lookupPath : patterns.iterator().next();
|
||||||
|
request.setAttribute(BEST_MATCHING_PATTERN_ATTRIBUTE, bestPattern);
|
||||||
|
|
||||||
Map<String, String> uriTemplateVariables = getPathMatcher().extractUriTemplateVariables(pattern, lookupPath);
|
Map<String, String> uriTemplateVariables = getPathMatcher().extractUriTemplateVariables(bestPattern, lookupPath);
|
||||||
request.setAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, uriTemplateVariables);
|
request.setAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, uriTemplateVariables);
|
||||||
|
|
||||||
if (!info.getProducesCondition().getProducibleMediaTypes().isEmpty()) {
|
if (!info.getProducesCondition().getProducibleMediaTypes().isEmpty()) {
|
||||||
|
|
|
||||||
|
|
@ -204,12 +204,22 @@ public class RequestMappingInfoHandlerMappingTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void bestMatchingPatternAttribute() {
|
public void bestMatchingPatternAttribute() {
|
||||||
PatternsRequestCondition patterns = new PatternsRequestCondition("/1/2", "/{path1}/2");
|
PatternsRequestCondition patterns = new PatternsRequestCondition("/{path1}/2", "/**");
|
||||||
RequestMappingInfo key = new RequestMappingInfo(patterns, null, null, null, null, null, null);
|
RequestMappingInfo key = new RequestMappingInfo(patterns, null, null, null, null, null, null);
|
||||||
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/1/2");
|
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/1/2");
|
||||||
String lookupPath = new UrlPathHelper().getLookupPathForRequest(request);
|
|
||||||
|
|
||||||
this.mapping.handleMatch(key, lookupPath, request);
|
this.mapping.handleMatch(key, "/1/2", request);
|
||||||
|
|
||||||
|
assertEquals("/{path1}/2", request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bestMatchingPatternAttributeNoPatternsDefined() {
|
||||||
|
PatternsRequestCondition patterns = new PatternsRequestCondition();
|
||||||
|
RequestMappingInfo key = new RequestMappingInfo(patterns, null, null, null, null, null, null);
|
||||||
|
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/1/2");
|
||||||
|
|
||||||
|
this.mapping.handleMatch(key, "/1/2", request);
|
||||||
|
|
||||||
assertEquals("/1/2", request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE));
|
assertEquals("/1/2", request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue