From 1240962d68bfc3f0eb2252d89887b52d2bdf7c2e 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. Closes gh-36095 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 ed5ec319b5a..d16cedf5ec0 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 @@ class SingleCharWildcardedPathElement extends PathElement { 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; } }