From 1d2351c87b4f278d1de4980e3c2bcbc754146283 Mon Sep 17 00:00:00 2001 From: rstoyanchev Date: Mon, 9 Feb 2026 16:33:22 +0000 Subject: [PATCH] Optimize single PathPattern match Closes gh-36275 --- .../result/condition/PatternsRequestCondition.java | 9 ++++++--- .../mvc/condition/PathPatternsRequestCondition.java | 3 +++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/PatternsRequestCondition.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/PatternsRequestCondition.java index d078ef66214..c7e4a8d1050 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/PatternsRequestCondition.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/condition/PatternsRequestCondition.java @@ -157,12 +157,15 @@ public final class PatternsRequestCondition extends AbstractRequestCondition matches = getMatchingPatterns(exchange); + PathContainer lookupPath = exchange.getRequest().getPath().pathWithinApplication(); + if (this.patterns.size() == 1) { + return (this.patterns.first().matches(lookupPath) ? this : null); + } + SortedSet matches = getMatchingPatterns(lookupPath); return (matches != null ? new PatternsRequestCondition(matches) : null); } - private @Nullable SortedSet getMatchingPatterns(ServerWebExchange exchange) { - PathContainer lookupPath = exchange.getRequest().getPath().pathWithinApplication(); + private @Nullable SortedSet getMatchingPatterns(PathContainer lookupPath) { TreeSet result = null; for (PathPattern pattern : this.patterns) { if (pattern.matches(lookupPath)) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestCondition.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestCondition.java index 0fc35256b49..0a60fede8ef 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestCondition.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/condition/PathPatternsRequestCondition.java @@ -189,6 +189,9 @@ public final class PathPatternsRequestCondition extends AbstractRequestCondition @Override public @Nullable PathPatternsRequestCondition getMatchingCondition(HttpServletRequest request) { PathContainer path = ServletRequestPathUtils.getParsedRequestPath(request).pathWithinApplication(); + if (this.patterns.size() == 1) { + return (this.patterns.first().matches(path) ? this : null); + } SortedSet matches = getMatchingPatterns(path); return (matches != null ? new PathPatternsRequestCondition(matches) : null); }