Browse Source

Optimize single PathPattern match

Closes gh-36275
pull/36465/head
rstoyanchev 1 month ago
parent
commit
5c537db2cc
  1. 9
      spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/PatternsRequestCondition.java
  2. 3
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestCondition.java

9
spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/PatternsRequestCondition.java

@ -157,13 +157,16 @@ public final class PatternsRequestCondition extends AbstractRequestCondition<Pat @@ -157,13 +157,16 @@ public final class PatternsRequestCondition extends AbstractRequestCondition<Pat
@Override
@Nullable
public PatternsRequestCondition getMatchingCondition(ServerWebExchange exchange) {
SortedSet<PathPattern> matches = getMatchingPatterns(exchange);
PathContainer lookupPath = exchange.getRequest().getPath().pathWithinApplication();
if (this.patterns.size() == 1) {
return (this.patterns.first().matches(lookupPath) ? this : null);
}
SortedSet<PathPattern> matches = getMatchingPatterns(lookupPath);
return (matches != null ? new PatternsRequestCondition(matches) : null);
}
@Nullable
private SortedSet<PathPattern> getMatchingPatterns(ServerWebExchange exchange) {
PathContainer lookupPath = exchange.getRequest().getPath().pathWithinApplication();
private SortedSet<PathPattern> getMatchingPatterns(PathContainer lookupPath) {
TreeSet<PathPattern> result = null;
for (PathPattern pattern : this.patterns) {
if (pattern.matches(lookupPath)) {

3
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestCondition.java

@ -190,6 +190,9 @@ public final class PathPatternsRequestCondition extends AbstractRequestCondition @@ -190,6 +190,9 @@ public final class PathPatternsRequestCondition extends AbstractRequestCondition
@Nullable
public PathPatternsRequestCondition getMatchingCondition(HttpServletRequest request) {
PathContainer path = ServletRequestPathUtils.getParsedRequestPath(request).pathWithinApplication();
if (this.patterns.size() == 1) {
return (this.patterns.first().matches(path) ? this : null);
}
SortedSet<PathPattern> matches = getMatchingPatterns(path);
return (matches != null ? new PathPatternsRequestCondition(matches) : null);
}

Loading…
Cancel
Save