|
|
|
@ -16,14 +16,8 @@ |
|
|
|
|
|
|
|
|
|
|
|
package org.springframework.web.servlet.mvc.method; |
|
|
|
package org.springframework.web.servlet.mvc.method; |
|
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.*; |
|
|
|
import java.util.Comparator; |
|
|
|
|
|
|
|
import java.util.HashSet; |
|
|
|
|
|
|
|
import java.util.LinkedHashMap; |
|
|
|
|
|
|
|
import java.util.LinkedHashSet; |
|
|
|
|
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
import java.util.Map.Entry; |
|
|
|
import java.util.Map.Entry; |
|
|
|
import java.util.Set; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import javax.servlet.ServletException; |
|
|
|
import javax.servlet.ServletException; |
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
|
|
import javax.servlet.http.HttpServletRequest; |
|
|
|
@ -97,16 +91,28 @@ 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 bestPattern; |
|
|
|
|
|
|
|
Map<String, String> uriVariables; |
|
|
|
|
|
|
|
Map<String, String> decodedUriVariables; |
|
|
|
|
|
|
|
|
|
|
|
Set<String> patterns = info.getPatternsCondition().getPatterns(); |
|
|
|
Set<String> patterns = info.getPatternsCondition().getPatterns(); |
|
|
|
String bestPattern = patterns.isEmpty() ? lookupPath : patterns.iterator().next(); |
|
|
|
if (patterns.isEmpty()) { |
|
|
|
request.setAttribute(BEST_MATCHING_PATTERN_ATTRIBUTE, bestPattern); |
|
|
|
bestPattern = lookupPath; |
|
|
|
|
|
|
|
uriVariables = Collections.emptyMap(); |
|
|
|
|
|
|
|
decodedUriVariables = Collections.emptyMap(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
bestPattern = patterns.iterator().next(); |
|
|
|
|
|
|
|
uriVariables = getPathMatcher().extractUriTemplateVariables(bestPattern, lookupPath); |
|
|
|
|
|
|
|
decodedUriVariables = getUrlPathHelper().decodePathVariables(request, uriVariables); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Map<String, String> uriVariables = getPathMatcher().extractUriTemplateVariables(bestPattern, lookupPath); |
|
|
|
request.setAttribute(BEST_MATCHING_PATTERN_ATTRIBUTE, bestPattern); |
|
|
|
Map<String, String> decodedUriVariables = getUrlPathHelper().decodePathVariables(request, uriVariables); |
|
|
|
|
|
|
|
request.setAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, decodedUriVariables); |
|
|
|
request.setAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, decodedUriVariables); |
|
|
|
|
|
|
|
|
|
|
|
if (isMatrixVariableContentAvailable()) { |
|
|
|
if (isMatrixVariableContentAvailable()) { |
|
|
|
request.setAttribute(HandlerMapping.MATRIX_VARIABLES_ATTRIBUTE, extractMatrixVariables(request, uriVariables)); |
|
|
|
Map<String, MultiValueMap<String, String>> matrixVars = extractMatrixVariables(request, uriVariables); |
|
|
|
|
|
|
|
request.setAttribute(HandlerMapping.MATRIX_VARIABLES_ATTRIBUTE, matrixVars); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!info.getProducesCondition().getProducibleMediaTypes().isEmpty()) { |
|
|
|
if (!info.getProducesCondition().getProducibleMediaTypes().isEmpty()) { |
|
|
|
|