From 5c537db2cc48cfc1d283dd446c74cc1cfbbaa1ba 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 120e39c8397..7f6a6ab9f33 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,13 +157,16 @@ 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); } @Nullable - private SortedSet getMatchingPatterns(ServerWebExchange exchange) { - PathContainer lookupPath = exchange.getRequest().getPath().pathWithinApplication(); + private 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 331c1864713..2622b22139b 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 @@ -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 matches = getMatchingPatterns(path); return (matches != null ? new PathPatternsRequestCondition(matches) : null); }