From 4b211643bb0bde7e3096500350093bbbc28854ff Mon Sep 17 00:00:00 2001 From: "elgun.shukurov" Date: Sun, 22 Mar 2026 19:32:58 +0400 Subject: [PATCH] Handle blank Accept-Language header in AcceptHeaderLocaleResolver When the Accept-Language header is present but blank, defaultLocale was ignored and fell back to Locale.getDefault() (JVM system locale). A blank header represents the same intent as an absent header. Closes gh-36513 Signed-off-by: elgun.shukurov --- .../web/servlet/i18n/AcceptHeaderLocaleResolver.java | 2 +- .../web/servlet/i18n/AcceptHeaderLocaleResolverTests.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java index 25a2efae8fe..32b03616a82 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java @@ -85,7 +85,7 @@ public class AcceptHeaderLocaleResolver extends AbstractLocaleResolver { @Override public Locale resolveLocale(HttpServletRequest request) { Locale defaultLocale = getDefaultLocale(); - if (defaultLocale != null && request.getHeader("Accept-Language") == null) { + if (defaultLocale != null && !StringUtils.hasText(request.getHeader("Accept-Language"))) { return defaultLocale; } Locale requestLocale = request.getLocale(); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolverTests.java index 11554fa8522..c396c6ab075 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolverTests.java @@ -105,6 +105,14 @@ class AcceptHeaderLocaleResolverTests { assertThat(this.resolver.resolveLocale(request)).isEqualTo(US); } + @Test + void defaultLocaleWithBlankAcceptLanguageHeader() { + this.resolver.setDefaultLocale(JAPANESE); + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addHeader("Accept-Language", ""); + assertThat(this.resolver.resolveLocale(request)).isEqualTo(JAPANESE); + } + private HttpServletRequest request(Locale... locales) { MockHttpServletRequest request = new MockHttpServletRequest();