Skip to content

Commit 7a5a689

Browse files
committed
Avoid filling up AntPathMatcher cache
This change avoid use of AntPathMatcher to extract URI template variables when the lookup path is used as the best matching pattern. Issue: SPR-10803
1 parent c8e8d6c commit 7a5a689

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMapping.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,10 @@
1616

1717
package org.springframework.web.servlet.mvc.method;
1818

19-
import java.util.ArrayList;
20-
import java.util.Comparator;
21-
import java.util.HashSet;
22-
import java.util.LinkedHashMap;
23-
import java.util.LinkedHashSet;
24-
import java.util.Map;
19+
import java.util.*;
2520
import java.util.Map.Entry;
2621
import java.util.Set;
22+
2723
import javax.servlet.ServletException;
2824
import javax.servlet.http.HttpServletRequest;
2925

@@ -94,16 +90,28 @@ public int compare(RequestMappingInfo info1, RequestMappingInfo info2) {
9490
protected void handleMatch(RequestMappingInfo info, String lookupPath, HttpServletRequest request) {
9591
super.handleMatch(info, lookupPath, request);
9692

93+
String bestPattern;
94+
Map<String, String> uriVariables;
95+
Map<String, String> decodedUriVariables;
96+
9797
Set<String> patterns = info.getPatternsCondition().getPatterns();
98-
String bestPattern = patterns.isEmpty() ? lookupPath : patterns.iterator().next();
99-
request.setAttribute(BEST_MATCHING_PATTERN_ATTRIBUTE, bestPattern);
98+
if (patterns.isEmpty()) {
99+
bestPattern = lookupPath;
100+
uriVariables = Collections.emptyMap();
101+
decodedUriVariables = Collections.emptyMap();
102+
}
103+
else {
104+
bestPattern = patterns.iterator().next();
105+
uriVariables = getPathMatcher().extractUriTemplateVariables(bestPattern, lookupPath);
106+
decodedUriVariables = getUrlPathHelper().decodePathVariables(request, uriVariables);
107+
}
100108

101-
Map<String, String> uriVariables = getPathMatcher().extractUriTemplateVariables(bestPattern, lookupPath);
102-
Map<String, String> decodedUriVariables = getUrlPathHelper().decodePathVariables(request, uriVariables);
109+
request.setAttribute(BEST_MATCHING_PATTERN_ATTRIBUTE, bestPattern);
103110
request.setAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, decodedUriVariables);
104111

105112
if (isMatrixVariableContentAvailable()) {
106-
request.setAttribute(HandlerMapping.MATRIX_VARIABLES_ATTRIBUTE, extractMatrixVariables(request, uriVariables));
113+
Map<String, MultiValueMap<String, String>> matrixVars = extractMatrixVariables(request, uriVariables);
114+
request.setAttribute(HandlerMapping.MATRIX_VARIABLES_ATTRIBUTE, matrixVars);
107115
}
108116

109117
if (!info.getProducesCondition().getProducibleMediaTypes().isEmpty()) {

0 commit comments

Comments
 (0)