From a3fa4d8ae2af4ce3f79e906af1f0cee339e7126d Mon Sep 17 00:00:00 2001 From: Minkyu Park Date: Mon, 5 Jan 2026 19:50:51 +0900 Subject: [PATCH] Optimize single-char wildcard path matching performance Use lazy evaluation in SingleCharWildcardedPathElement to avoid unnecessary Character.toLowerCase() calls. Resolves performance TODO from 2017. Signed-off-by: Minkyu Park --- .../web/util/pattern/SingleCharWildcardedPathElement.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/util/pattern/SingleCharWildcardedPathElement.java b/spring-web/src/main/java/org/springframework/web/util/pattern/SingleCharWildcardedPathElement.java index ed5ec319b5ad..d16cedf5ec0c 100644 --- a/spring-web/src/main/java/org/springframework/web/util/pattern/SingleCharWildcardedPathElement.java +++ b/spring-web/src/main/java/org/springframework/web/util/pattern/SingleCharWildcardedPathElement.java @@ -85,8 +85,11 @@ public boolean matches(int pathIndex, MatchingContext matchingContext) { else { for (int i = 0; i < this.len; i++) { char ch = this.text[i]; - // TODO revisit performance if doing a lot of case insensitive matching - if ((ch != '?') && (ch != Character.toLowerCase(value.charAt(i)))) { + char valCh = value.charAt(i); + if (ch == valCh || ch == '?') { + continue; + } + if (ch != Character.toLowerCase(valCh)) { return false; } }