Browse Source

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 <elgun.sukurov@kapitalbank.az>
pull/36513/head
elgun.shukurov 2 days ago committed by Brian Clozel
parent
commit
4b211643bb
  1. 2
      spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java
  2. 8
      spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolverTests.java

2
spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java

@ -85,7 +85,7 @@ public class AcceptHeaderLocaleResolver extends AbstractLocaleResolver { @@ -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();

8
spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolverTests.java

@ -105,6 +105,14 @@ class AcceptHeaderLocaleResolverTests { @@ -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();

Loading…
Cancel
Save