diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcWebTestClient.java b/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcWebTestClient.java index 4a58df0c0c4d..f240da38dbd9 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcWebTestClient.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/client/MockMvcWebTestClient.java @@ -45,7 +45,7 @@ import org.springframework.web.servlet.FlashMapManager; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.HandlerInterceptor; -import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.LocaleContextResolver; import org.springframework.web.servlet.View; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; @@ -335,9 +335,9 @@ ControllerSpec mappedInterceptors( /** * Provide the LocaleResolver to use. *
This is delegated to
- * {@link StandaloneMockMvcBuilder#setLocaleResolver(LocaleResolver)}.
+ * {@link StandaloneMockMvcBuilder#setLocaleResolver(LocaleContextResolver)}.
*/
- ControllerSpec localeResolver(LocaleResolver localeResolver);
+ ControllerSpec localeResolver(LocaleContextResolver localeResolver);
/**
* Provide a custom FlashMapManager.
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/client/StandaloneMockMvcSpec.java b/spring-test/src/main/java/org/springframework/test/web/servlet/client/StandaloneMockMvcSpec.java
index b7b1f4d44881..588d3492e113 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/client/StandaloneMockMvcSpec.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/client/StandaloneMockMvcSpec.java
@@ -31,7 +31,7 @@
import org.springframework.web.servlet.FlashMapManager;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.HandlerInterceptor;
-import org.springframework.web.servlet.LocaleResolver;
+import org.springframework.web.servlet.LocaleContextResolver;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
@@ -135,7 +135,7 @@ public StandaloneMockMvcSpec singleView(View view) {
}
@Override
- public StandaloneMockMvcSpec localeResolver(LocaleResolver localeResolver) {
+ public StandaloneMockMvcSpec localeResolver(LocaleContextResolver localeResolver) {
this.mockMvcBuilder.setLocaleResolver(localeResolver);
return this;
}
diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java
index 2671c5217e14..e3219ff436ea 100644
--- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java
+++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java
@@ -51,7 +51,7 @@
import org.springframework.web.servlet.FlashMapManager;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.HandlerInterceptor;
-import org.springframework.web.servlet.LocaleResolver;
+import org.springframework.web.servlet.LocaleContextResolver;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
@@ -121,7 +121,7 @@ public class StandaloneMockMvcBuilder extends AbstractMockMvcBuilder Note: Does not support {@link #setLocale} since the {@code Accept-Language}
+ * Note: Does not support {@link #setLocaleContext} since the {@code Accept-Language}
* header can only be changed by changing the client's locale settings.
*
* @author Juergen Hoeller
@@ -41,7 +43,7 @@
* @since 27.02.2003
* @see jakarta.servlet.http.HttpServletRequest#getLocale()
*/
-public class AcceptHeaderLocaleResolver extends AbstractLocaleResolver {
+public class AcceptHeaderLocaleResolver extends AbstractLocaleContextResolver {
private final List Typically coming from a DispatcherServlet's {@link LocaleResolver}.
+ * Typically coming from a DispatcherServlet's {@link LocaleContextResolver}.
* Also includes a fallback check for JSTL's Locale attribute.
* @see RequestContextUtils#getLocale
*/
@@ -354,34 +351,34 @@ protected TimeZone getFallbackTimeZone() {
/**
* Change the current locale to the specified one,
- * storing the new locale through the configured {@link LocaleResolver}.
+ * storing the new locale through the configured {@link LocaleContextResolver}.
* @param locale the new locale
- * @see LocaleResolver#setLocale
+ * @see LocaleContextResolver#setLocaleContext
* @see #changeLocale(java.util.Locale, java.util.TimeZone)
*/
public void changeLocale(Locale locale) {
- LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(this.request);
+ LocaleContextResolver localeResolver = RequestContextUtils.getLocaleResolver(this.request);
if (localeResolver == null) {
- throw new IllegalStateException("Cannot change locale if no LocaleResolver configured");
+ throw new IllegalStateException("Cannot change locale if no LocaleContextResolver configured");
}
- localeResolver.setLocale(this.request, this.response, locale);
+ localeResolver.setLocaleContext(this.request, this.response, new SimpleLocaleContext(locale));
this.locale = locale;
}
/**
* Change the current locale to the specified locale and time zone context,
- * storing the new locale context through the configured {@link LocaleResolver}.
+ * storing the new locale context through the configured {@link LocaleContextResolver}.
* @param locale the new locale
* @param timeZone the new time zone
* @see LocaleContextResolver#setLocaleContext
* @see org.springframework.context.i18n.SimpleTimeZoneAwareLocaleContext
*/
public void changeLocale(Locale locale, TimeZone timeZone) {
- LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(this.request);
- if (!(localeResolver instanceof LocaleContextResolver)) {
+ LocaleContextResolver localeResolver = RequestContextUtils.getLocaleResolver(this.request);
+ if (localeResolver == null) {
throw new IllegalStateException("Cannot change locale context if no LocaleContextResolver configured");
}
- ((LocaleContextResolver) localeResolver).setLocaleContext(this.request, this.response,
+ localeResolver.setLocaleContext(this.request, this.response,
new SimpleTimeZoneAwareLocaleContext(locale, timeZone));
this.locale = locale;
this.timeZone = timeZone;
diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContextUtils.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContextUtils.java
index 7f438a03b09e..3201b19775d4 100644
--- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContextUtils.java
+++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContextUtils.java
@@ -37,7 +37,6 @@
import org.springframework.web.servlet.FlashMap;
import org.springframework.web.servlet.FlashMapManager;
import org.springframework.web.servlet.LocaleContextResolver;
-import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
@@ -50,6 +49,7 @@
*
* @author Juergen Hoeller
* @author Rossen Stoyanchev
+ * @author Vedran Pavic
* @since 03.03.2003
* @see RequestContext
* @see org.springframework.web.servlet.DispatcherServlet
@@ -116,19 +116,19 @@ public static WebApplicationContext findWebApplicationContext(HttpServletRequest
}
/**
- * Return the {@link LocaleResolver} that has been bound to the request by the
+ * Return the {@link LocaleContextResolver} that has been bound to the request by the
* {@link DispatcherServlet}.
* @param request current HTTP request
* @return the current {@code LocaleResolver}, or {@code null} if not found
*/
@Nullable
- public static LocaleResolver getLocaleResolver(HttpServletRequest request) {
- return (LocaleResolver) request.getAttribute(DispatcherServlet.LOCALE_RESOLVER_ATTRIBUTE);
+ public static LocaleContextResolver getLocaleResolver(HttpServletRequest request) {
+ return (LocaleContextResolver) request.getAttribute(DispatcherServlet.LOCALE_RESOLVER_ATTRIBUTE);
}
/**
* Retrieve the current locale from the given request, using the
- * {@link LocaleResolver} bound to the request by the {@link DispatcherServlet}
+ * {@link LocaleContextResolver} bound to the request by the {@link DispatcherServlet}
* (if available), falling back to the request's locale based on the
* {@code Accept-Language} header or the default locale for the server.
* This method serves as a straightforward alternative to the standard
@@ -143,13 +143,19 @@ public static LocaleResolver getLocaleResolver(HttpServletRequest request) {
* @see org.springframework.context.i18n.LocaleContextHolder#getLocale()
*/
public static Locale getLocale(HttpServletRequest request) {
- LocaleResolver localeResolver = getLocaleResolver(request);
- return (localeResolver != null ? localeResolver.resolveLocale(request) : request.getLocale());
+ LocaleContextResolver localeResolver = getLocaleResolver(request);
+ if (localeResolver != null) {
+ Locale locale = localeResolver.resolveLocaleContext(request).getLocale();
+ if (locale != null) {
+ return locale;
+ }
+ }
+ return request.getLocale();
}
/**
* Retrieve the current time zone from the given request, using the
- * {@link TimeZoneAwareLocaleContext} in the {@link LocaleResolver} bound to
+ * {@link TimeZoneAwareLocaleContext} in the {@link LocaleContextResolver} bound to
* the request by the {@link DispatcherServlet} (if available).
* Note: This method returns {@code null} if no specific time zone can be
* resolved for the given request. This is in contrast to {@link #getLocale}
@@ -167,9 +173,9 @@ public static Locale getLocale(HttpServletRequest request) {
*/
@Nullable
public static TimeZone getTimeZone(HttpServletRequest request) {
- LocaleResolver localeResolver = getLocaleResolver(request);
- if (localeResolver instanceof LocaleContextResolver localeContextResolver) {
- LocaleContext localeContext = localeContextResolver.resolveLocaleContext(request);
+ LocaleContextResolver localeResolver = getLocaleResolver(request);
+ if (localeResolver != null) {
+ LocaleContext localeContext = localeResolver.resolveLocaleContext(request);
if (localeContext instanceof TimeZoneAwareLocaleContext timeZoneAwareLocaleContext) {
return timeZoneAwareLocaleContext.getTimeZone();
}
diff --git a/spring-webmvc/src/main/resources/org/springframework/web/servlet/DispatcherServlet.properties b/spring-webmvc/src/main/resources/org/springframework/web/servlet/DispatcherServlet.properties
index c55b61864e96..bdadfd1c1707 100644
--- a/spring-webmvc/src/main/resources/org/springframework/web/servlet/DispatcherServlet.properties
+++ b/spring-webmvc/src/main/resources/org/springframework/web/servlet/DispatcherServlet.properties
@@ -2,7 +2,7 @@
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.
-org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
+org.springframework.web.servlet.LocaleContextResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
@@ -24,4 +24,4 @@ org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
-org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
\ No newline at end of file
+org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java
index c52eea704079..d4f8591870ca 100644
--- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java
+++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java
@@ -87,7 +87,7 @@
import org.springframework.web.servlet.FlashMapManager;
import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.web.servlet.HandlerInterceptor;
-import org.springframework.web.servlet.LocaleResolver;
+import org.springframework.web.servlet.LocaleContextResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.RequestToViewNameTranslator;
import org.springframework.web.servlet.ThemeResolver;
@@ -232,7 +232,7 @@ public void testDefaultConfig() throws Exception {
assertThat(appContext.getBean(ConversionService.class)).isNotNull();
assertThat(appContext.getBean(LocalValidatorFactoryBean.class)).isNotNull();
assertThat(appContext.getBean(Validator.class)).isNotNull();
- assertThat(appContext.getBean("localeResolver", LocaleResolver.class)).isNotNull();
+ assertThat(appContext.getBean("localeResolver", LocaleContextResolver.class)).isNotNull();
assertThat(appContext.getBean("themeResolver", ThemeResolver.class)).isNotNull();
assertThat(appContext.getBean("viewNameTranslator", RequestToViewNameTranslator.class)).isNotNull();
assertThat(appContext.getBean("flashMapManager", FlashMapManager.class)).isNotNull();
diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java
index c5c288a1ae8e..5dc7632f78ac 100644
--- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java
+++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2021 the original author or authors.
+ * Copyright 2002-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -67,7 +67,7 @@
import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.HandlerMapping;
-import org.springframework.web.servlet.LocaleResolver;
+import org.springframework.web.servlet.LocaleContextResolver;
import org.springframework.web.servlet.RequestToViewNameTranslator;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping;
@@ -326,7 +326,7 @@ public void defaultPathMatchConfiguration() {
@Test
public void defaultLocaleResolverConfiguration() {
ApplicationContext context = initContext(WebConfig.class);
- LocaleResolver localeResolver = context.getBean(LOCALE_RESOLVER_BEAN_NAME, LocaleResolver.class);
+ LocaleContextResolver localeResolver = context.getBean(LOCALE_RESOLVER_BEAN_NAME, LocaleContextResolver.class);
assertThat(localeResolver).isNotNull();
assertThat(localeResolver).isInstanceOf(AcceptHeaderLocaleResolver.class);
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 6b5243d9a251..01594f733bd3 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
@@ -49,38 +49,38 @@ class AcceptHeaderLocaleResolverTests {
@Test
void resolve() {
- assertThat(this.resolver.resolveLocale(request(CANADA))).isEqualTo(CANADA);
- assertThat(this.resolver.resolveLocale(request(US, CANADA))).isEqualTo(US);
+ assertThat(this.resolver.resolveLocaleContext(request(CANADA)).getLocale()).isEqualTo(CANADA);
+ assertThat(this.resolver.resolveLocaleContext(request(US, CANADA)).getLocale()).isEqualTo(US);
}
@Test
void resolvePreferredSupported() {
this.resolver.setSupportedLocales(Collections.singletonList(CANADA));
- assertThat(this.resolver.resolveLocale(request(US, CANADA))).isEqualTo(CANADA);
+ assertThat(this.resolver.resolveLocaleContext(request(US, CANADA)).getLocale()).isEqualTo(CANADA);
}
@Test
void resolvePreferredNotSupported() {
this.resolver.setSupportedLocales(Collections.singletonList(CANADA));
- assertThat(this.resolver.resolveLocale(request(US, UK))).isEqualTo(US);
+ assertThat(this.resolver.resolveLocaleContext(request(US, UK)).getLocale()).isEqualTo(US);
}
@Test
void resolvePreferredAgainstLanguageOnly() {
this.resolver.setSupportedLocales(Collections.singletonList(ENGLISH));
- assertThat(this.resolver.resolveLocale(request(GERMANY, US, UK))).isEqualTo(ENGLISH);
+ assertThat(this.resolver.resolveLocaleContext(request(GERMANY, US, UK)).getLocale()).isEqualTo(ENGLISH);
}
@Test
void resolvePreferredAgainstCountryIfPossible() {
this.resolver.setSupportedLocales(Arrays.asList(ENGLISH, UK));
- assertThat(this.resolver.resolveLocale(request(GERMANY, US, UK))).isEqualTo(UK);
+ assertThat(this.resolver.resolveLocaleContext(request(GERMANY, US, UK)).getLocale()).isEqualTo(UK);
}
@Test
void resolvePreferredAgainstLanguageWithMultipleSupportedLocales() {
this.resolver.setSupportedLocales(Arrays.asList(GERMAN, US));
- assertThat(this.resolver.resolveLocale(request(GERMANY, US, UK))).isEqualTo(GERMAN);
+ assertThat(this.resolver.resolveLocaleContext(request(GERMANY, US, UK)).getLocale()).isEqualTo(GERMAN);
}
@Test
@@ -91,18 +91,18 @@ void resolvePreferredNotSupportedWithDefault() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addHeader("Accept-Language", KOREA.toLanguageTag());
request.setPreferredLocales(Collections.singletonList(KOREA));
- assertThat(this.resolver.resolveLocale(request)).isEqualTo(Locale.JAPAN);
+ assertThat(this.resolver.resolveLocaleContext(request).getLocale()).isEqualTo(Locale.JAPAN);
}
@Test
void defaultLocale() {
this.resolver.setDefaultLocale(JAPANESE);
MockHttpServletRequest request = new MockHttpServletRequest();
- assertThat(this.resolver.resolveLocale(request)).isEqualTo(JAPANESE);
+ assertThat(this.resolver.resolveLocaleContext(request).getLocale()).isEqualTo(JAPANESE);
request.addHeader("Accept-Language", US.toLanguageTag());
request.setPreferredLocales(Collections.singletonList(US));
- assertThat(this.resolver.resolveLocale(request)).isEqualTo(US);
+ assertThat(this.resolver.resolveLocaleContext(request).getLocale()).isEqualTo(US);
}
diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/CookieLocaleResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/CookieLocaleResolverTests.java
index 4b9152b8961f..7fa886b6be31 100644
--- a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/CookieLocaleResolverTests.java
+++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/CookieLocaleResolverTests.java
@@ -61,7 +61,7 @@ void resolveLocale() {
request.setCookies(cookie);
resolver = new CookieLocaleResolver("LanguageKoekje");
- Locale loc = resolver.resolveLocale(request);
+ Locale loc = resolver.resolveLocaleContext(request).getLocale();
assertThat(loc.getLanguage()).isEqualTo("nl");
}
@@ -141,8 +141,8 @@ void resolveLocaleContextWithInvalidTimeZoneOnErrorDispatch() {
}
@Test
- void setAndResolveLocale() {
- resolver.setLocale(request, response, new Locale("nl", ""));
+ void setAndResolveLocaleContext() {
+ resolver.setLocaleContext(request, response, new SimpleLocaleContext(new Locale("nl", "")));
MockCookie cookie = MockCookie.parse(response.getHeader(HttpHeaders.SET_COOKIE));
assertThat(cookie).isNotNull();
@@ -155,19 +155,6 @@ void setAndResolveLocale() {
request = new MockHttpServletRequest();
request.setCookies(cookie);
- resolver = new CookieLocaleResolver();
- Locale loc = resolver.resolveLocale(request);
- assertThat(loc.getLanguage()).isEqualTo("nl");
- }
-
- @Test
- void setAndResolveLocaleContext() {
- resolver.setLocaleContext(request, response, new SimpleLocaleContext(new Locale("nl", "")));
-
- Cookie cookie = response.getCookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME);
- request = new MockHttpServletRequest();
- request.setCookies(cookie);
-
resolver = new CookieLocaleResolver();
LocaleContext loc = resolver.resolveLocaleContext(request);
assertThat(loc.getLocale().getLanguage()).isEqualTo("nl");
@@ -210,7 +197,7 @@ void setAndResolveLocaleContextWithTimeZoneOnly() {
@Test
void setAndResolveLocaleWithCountry() {
- resolver.setLocale(request, response, new Locale("de", "AT"));
+ resolver.setLocaleContext(request, response, new SimpleLocaleContext(new Locale("de", "AT")));
MockCookie cookie = MockCookie.parse(response.getHeader(HttpHeaders.SET_COOKIE));
assertThat(cookie).isNotNull();
@@ -225,7 +212,7 @@ void setAndResolveLocaleWithCountry() {
request.setCookies(cookie);
resolver = new CookieLocaleResolver();
- Locale loc = resolver.resolveLocale(request);
+ Locale loc = resolver.resolveLocaleContext(request).getLocale();
assertThat(loc.getLanguage()).isEqualTo("de");
assertThat(loc.getCountry()).isEqualTo("AT");
}
@@ -233,7 +220,7 @@ void setAndResolveLocaleWithCountry() {
@Test
void setAndResolveLocaleWithCountryAsLegacyJava() {
resolver.setLanguageTagCompliant(false);
- resolver.setLocale(request, response, new Locale("de", "AT"));
+ resolver.setLocaleContext(request, response, new SimpleLocaleContext(new Locale("de", "AT")));
MockCookie cookie = MockCookie.parse(response.getHeader(HttpHeaders.SET_COOKIE));
assertThat(cookie).isNotNull();
@@ -248,7 +235,7 @@ void setAndResolveLocaleWithCountryAsLegacyJava() {
request.setCookies(cookie);
resolver = new CookieLocaleResolver();
- Locale loc = resolver.resolveLocale(request);
+ Locale loc = resolver.resolveLocaleContext(request).getLocale();
assertThat(loc.getLanguage()).isEqualTo("de");
assertThat(loc.getCountry()).isEqualTo("AT");
}
@@ -261,7 +248,7 @@ void customCookie() {
resolver.setCookieMaxAge(Duration.ofSeconds(10000));
resolver.setCookieSecure(true);
resolver.setCookieSameSite("Lax");
- resolver.setLocale(request, response, new Locale("nl", ""));
+ resolver.setLocaleContext(request, response, new SimpleLocaleContext(new Locale("nl", "")));
MockCookie cookie = MockCookie.parse(response.getHeader(HttpHeaders.SET_COOKIE));
assertThat(cookie).isNotNull();
@@ -276,18 +263,10 @@ void customCookie() {
request.setCookies(cookie);
resolver = new CookieLocaleResolver("LanguageKoek");
- Locale loc = resolver.resolveLocale(request);
+ Locale loc = resolver.resolveLocaleContext(request).getLocale();
assertThat(loc.getLanguage()).isEqualTo("nl");
}
- @Test
- void resolveLocaleWithoutCookie() {
- request.addPreferredLocale(Locale.TAIWAN);
-
- Locale loc = resolver.resolveLocale(request);
- assertThat(loc).isEqualTo(request.getLocale());
- }
-
@Test
void resolveLocaleContextWithoutCookie() {
request.addPreferredLocale(Locale.TAIWAN);
@@ -298,16 +277,6 @@ void resolveLocaleContextWithoutCookie() {
assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isNull();
}
- @Test
- void resolveLocaleWithoutCookieAndDefaultLocale() {
- request.addPreferredLocale(Locale.TAIWAN);
-
- resolver.setDefaultLocale(Locale.GERMAN);
-
- Locale loc = resolver.resolveLocale(request);
- assertThat(loc).isEqualTo(Locale.GERMAN);
- }
-
@Test
void resolveLocaleContextWithoutCookieAndDefaultLocale() {
request.addPreferredLocale(Locale.TAIWAN);
@@ -321,16 +290,6 @@ void resolveLocaleContextWithoutCookieAndDefaultLocale() {
assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+1"));
}
- @Test
- void resolveLocaleWithCookieWithoutLocale() {
- request.addPreferredLocale(Locale.TAIWAN);
- Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, "");
- request.setCookies(cookie);
-
- Locale loc = resolver.resolveLocale(request);
- assertThat(loc).isEqualTo(request.getLocale());
- }
-
@Test
void resolveLocaleContextWithCookieWithoutLocale() {
request.addPreferredLocale(Locale.TAIWAN);
@@ -343,23 +302,6 @@ void resolveLocaleContextWithCookieWithoutLocale() {
assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isNull();
}
- @Test
- void setLocaleToNull() {
- request.addPreferredLocale(Locale.TAIWAN);
- Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString());
- request.setCookies(cookie);
-
- resolver.setLocale(request, response, null);
- Locale locale = (Locale) request.getAttribute(CookieLocaleResolver.LOCALE_REQUEST_ATTRIBUTE_NAME);
- assertThat(locale).isEqualTo(Locale.TAIWAN);
-
- Cookie[] cookies = response.getCookies();
- assertThat(cookies).hasSize(1);
- Cookie localeCookie = cookies[0];
- assertThat(localeCookie.getName()).isEqualTo(CookieLocaleResolver.DEFAULT_COOKIE_NAME);
- assertThat(localeCookie.getValue()).isEqualTo("");
- }
-
@Test
void setLocaleContextToNull() {
request.addPreferredLocale(Locale.TAIWAN);
@@ -379,24 +321,6 @@ void setLocaleContextToNull() {
assertThat(localeCookie.getValue()).isEqualTo("");
}
- @Test
- void setLocaleToNullWithDefault() {
- request.addPreferredLocale(Locale.TAIWAN);
- Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString());
- request.setCookies(cookie);
-
- resolver.setDefaultLocale(Locale.CANADA_FRENCH);
- resolver.setLocale(request, response, null);
- Locale locale = (Locale) request.getAttribute(CookieLocaleResolver.LOCALE_REQUEST_ATTRIBUTE_NAME);
- assertThat(locale).isEqualTo(Locale.CANADA_FRENCH);
-
- Cookie[] cookies = response.getCookies();
- assertThat(cookies).hasSize(1);
- Cookie localeCookie = cookies[0];
- assertThat(localeCookie.getName()).isEqualTo(CookieLocaleResolver.DEFAULT_COOKIE_NAME);
- assertThat(localeCookie.getValue()).isEqualTo("");
- }
-
@Test
void setLocaleContextToNullWithDefault() {
request.addPreferredLocale(Locale.TAIWAN);
@@ -424,7 +348,7 @@ void customDefaultLocaleFunction() {
resolver.setDefaultLocaleFunction(request -> Locale.GERMAN);
- assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN);
+ assertThat(resolver.resolveLocaleContext(request).getLocale()).isEqualTo(Locale.GERMAN);
}
@Test
diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/LocaleResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/LocaleResolverTests.java
index 3888670e3209..16c38f74e56b 100644
--- a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/LocaleResolverTests.java
+++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/LocaleResolverTests.java
@@ -26,7 +26,6 @@
import org.springframework.context.i18n.SimpleTimeZoneAwareLocaleContext;
import org.springframework.context.i18n.TimeZoneAwareLocaleContext;
import org.springframework.web.servlet.LocaleContextResolver;
-import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.testfixture.servlet.MockHttpServletRequest;
import org.springframework.web.testfixture.servlet.MockHttpServletResponse;
import org.springframework.web.testfixture.servlet.MockServletContext;
@@ -35,34 +34,35 @@
import static org.assertj.core.api.Assertions.fail;
/**
- * Unit tests for various {@link LocaleResolver} implementations.
+ * Unit tests for various {@link LocaleContextResolver} implementations.
*
* @author Juergen Hoeller
+ * @author Vedran Pavic
* @since 20.03.2003
*/
class LocaleResolverTests {
@Test
void acceptHeaderLocaleResolver() {
- doTest(new AcceptHeaderLocaleResolver(), false);
+ doTest(new AcceptHeaderLocaleResolver(), false, false);
}
@Test
void fixedLocaleResolver() {
- doTest(new FixedLocaleResolver(Locale.UK), false);
+ doTest(new FixedLocaleResolver(Locale.UK), false, true);
}
@Test
void cookieLocaleResolver() {
- doTest(new CookieLocaleResolver(), true);
+ doTest(new CookieLocaleResolver(), true, true);
}
@Test
void sessionLocaleResolver() {
- doTest(new SessionLocaleResolver(), true);
+ doTest(new SessionLocaleResolver(), true, true);
}
- private void doTest(LocaleResolver localeResolver, boolean shouldSet) {
+ private void doTest(LocaleContextResolver localeResolver, boolean shouldSet, boolean timeZoneAware) {
// create mocks
MockServletContext context = new MockServletContext();
MockHttpServletRequest request = new MockHttpServletRequest(context);
@@ -70,14 +70,14 @@ private void doTest(LocaleResolver localeResolver, boolean shouldSet) {
MockHttpServletResponse response = new MockHttpServletResponse();
// check original locale
- Locale locale = localeResolver.resolveLocale(request);
+ Locale locale = localeResolver.resolveLocaleContext(request).getLocale();
assertThat(locale).isEqualTo(Locale.UK);
// set new locale
try {
- localeResolver.setLocale(request, response, Locale.GERMANY);
+ localeResolver.setLocaleContext(request, response, new SimpleLocaleContext(Locale.GERMANY));
assertThat(shouldSet).as("should not be able to set Locale").isTrue();
// check new locale
- locale = localeResolver.resolveLocale(request);
+ locale = localeResolver.resolveLocaleContext(request).getLocale();
assertThat(locale).isEqualTo(Locale.GERMANY);
}
catch (UnsupportedOperationException ex) {
@@ -85,66 +85,68 @@ private void doTest(LocaleResolver localeResolver, boolean shouldSet) {
}
// check LocaleContext
- if (localeResolver instanceof LocaleContextResolver localeContextResolver) {
- LocaleContext localeContext = localeContextResolver.resolveLocaleContext(request);
- if (shouldSet) {
- assertThat(localeContext.getLocale()).isEqualTo(Locale.GERMANY);
- }
- else {
- assertThat(localeContext.getLocale()).isEqualTo(Locale.UK);
- }
+ LocaleContext localeContext = localeResolver.resolveLocaleContext(request);
+ if (shouldSet) {
+ assertThat(localeContext.getLocale()).isEqualTo(Locale.GERMANY);
+ }
+ else {
+ assertThat(localeContext.getLocale()).isEqualTo(Locale.UK);
+ }
+ if (timeZoneAware) {
boolean condition2 = localeContext instanceof TimeZoneAwareLocaleContext;
assertThat(condition2).isTrue();
assertThat(((TimeZoneAwareLocaleContext) localeContext).getTimeZone()).isNull();
+ }
- if (localeContextResolver instanceof AbstractLocaleContextResolver) {
- ((AbstractLocaleContextResolver) localeContextResolver).setDefaultTimeZone(TimeZone.getTimeZone("GMT+1"));
- request.removeAttribute(CookieLocaleResolver.LOCALE_REQUEST_ATTRIBUTE_NAME);
- localeContextResolver.resolveLocaleContext(request);
+ if (localeResolver instanceof AbstractLocaleContextResolver) {
+ ((AbstractLocaleContextResolver) localeResolver).setDefaultTimeZone(TimeZone.getTimeZone("GMT+1"));
+ request.removeAttribute(CookieLocaleResolver.LOCALE_REQUEST_ATTRIBUTE_NAME);
+ localeResolver.resolveLocaleContext(request);
+ if (timeZoneAware) {
assertThat(TimeZone.getTimeZone("GMT+1")).isEqualTo(((TimeZoneAwareLocaleContext) localeContext).getTimeZone());
}
+ }
- try {
- localeContextResolver.setLocaleContext(request, response, new SimpleLocaleContext(Locale.US));
- if (!shouldSet) {
- fail("should not be able to set Locale");
- }
- localeContext = localeContextResolver.resolveLocaleContext(request);
- assertThat(localeContext.getLocale()).isEqualTo(Locale.US);
- if (localeContextResolver instanceof AbstractLocaleContextResolver) {
- assertThat(TimeZone.getTimeZone("GMT+1")).isEqualTo(((TimeZoneAwareLocaleContext) localeContext).getTimeZone());
- }
- else {
- assertThat(((TimeZoneAwareLocaleContext) localeContext).getTimeZone()).isNull();
- }
-
- localeContextResolver.setLocaleContext(request, response,
- new SimpleTimeZoneAwareLocaleContext(Locale.GERMANY, TimeZone.getTimeZone("GMT+2")));
- localeContext = localeContextResolver.resolveLocaleContext(request);
+ try {
+ localeResolver.setLocaleContext(request, response, new SimpleLocaleContext(Locale.US));
+ if (!shouldSet) {
+ fail("should not be able to set Locale");
+ }
+ localeContext = localeResolver.resolveLocaleContext(request);
+ assertThat(localeContext.getLocale()).isEqualTo(Locale.US);
+ if (localeResolver instanceof AbstractLocaleContextResolver) {
+ assertThat(TimeZone.getTimeZone("GMT+1")).isEqualTo(((TimeZoneAwareLocaleContext) localeContext).getTimeZone());
+ }
+ else {
+ assertThat(((TimeZoneAwareLocaleContext) localeContext).getTimeZone()).isNull();
+ }
+
+ localeResolver.setLocaleContext(request, response,
+ new SimpleTimeZoneAwareLocaleContext(Locale.GERMANY, TimeZone.getTimeZone("GMT+2")));
+ localeContext = localeResolver.resolveLocaleContext(request);
+ assertThat(localeContext.getLocale()).isEqualTo(Locale.GERMANY);
+ boolean condition1 = localeContext instanceof TimeZoneAwareLocaleContext;
+ assertThat(condition1).isTrue();
+ assertThat(TimeZone.getTimeZone("GMT+2")).isEqualTo(((TimeZoneAwareLocaleContext) localeContext).getTimeZone());
+
+ localeResolver.setLocaleContext(request, response,
+ new SimpleTimeZoneAwareLocaleContext(null, TimeZone.getTimeZone("GMT+3")));
+ localeContext = localeResolver.resolveLocaleContext(request);
+ assertThat(localeContext.getLocale()).isEqualTo(Locale.UK);
+ boolean condition = localeContext instanceof TimeZoneAwareLocaleContext;
+ assertThat(condition).isTrue();
+ assertThat(TimeZone.getTimeZone("GMT+3")).isEqualTo(((TimeZoneAwareLocaleContext) localeContext).getTimeZone());
+
+ if (localeResolver instanceof AbstractLocaleContextResolver) {
+ ((AbstractLocaleContextResolver) localeResolver).setDefaultLocale(Locale.GERMANY);
+ request.removeAttribute(CookieLocaleResolver.LOCALE_REQUEST_ATTRIBUTE_NAME);
+ localeResolver.resolveLocaleContext(request);
assertThat(localeContext.getLocale()).isEqualTo(Locale.GERMANY);
- boolean condition1 = localeContext instanceof TimeZoneAwareLocaleContext;
- assertThat(condition1).isTrue();
- assertThat(TimeZone.getTimeZone("GMT+2")).isEqualTo(((TimeZoneAwareLocaleContext) localeContext).getTimeZone());
-
- localeContextResolver.setLocaleContext(request, response,
- new SimpleTimeZoneAwareLocaleContext(null, TimeZone.getTimeZone("GMT+3")));
- localeContext = localeContextResolver.resolveLocaleContext(request);
- assertThat(localeContext.getLocale()).isEqualTo(Locale.UK);
- boolean condition = localeContext instanceof TimeZoneAwareLocaleContext;
- assertThat(condition).isTrue();
- assertThat(TimeZone.getTimeZone("GMT+3")).isEqualTo(((TimeZoneAwareLocaleContext) localeContext).getTimeZone());
-
- if (localeContextResolver instanceof AbstractLocaleContextResolver) {
- ((AbstractLocaleContextResolver) localeContextResolver).setDefaultLocale(Locale.GERMANY);
- request.removeAttribute(CookieLocaleResolver.LOCALE_REQUEST_ATTRIBUTE_NAME);
- localeContextResolver.resolveLocaleContext(request);
- assertThat(localeContext.getLocale()).isEqualTo(Locale.GERMANY);
- }
}
- catch (UnsupportedOperationException ex) {
- if (shouldSet) {
- fail("should be able to set Locale");
- }
+ }
+ catch (UnsupportedOperationException ex) {
+ if (shouldSet) {
+ fail("should be able to set Locale");
}
}
}
diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/SessionLocaleResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/SessionLocaleResolverTests.java
index de9256f4bdef..2f61daa231f5 100644
--- a/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/SessionLocaleResolverTests.java
+++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/i18n/SessionLocaleResolverTests.java
@@ -22,6 +22,7 @@
import jakarta.servlet.http.HttpSession;
import org.junit.jupiter.api.Test;
+import org.springframework.context.i18n.SimpleLocaleContext;
import org.springframework.context.i18n.TimeZoneAwareLocaleContext;
import org.springframework.web.testfixture.servlet.MockHttpServletRequest;
import org.springframework.web.testfixture.servlet.MockHttpServletResponse;
@@ -48,27 +49,27 @@ class SessionLocaleResolverTests {
void resolveLocale() {
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, Locale.GERMAN);
- assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN);
+ assertThat(resolver.resolveLocaleContext(request).getLocale()).isEqualTo(Locale.GERMAN);
}
@Test
void setAndResolveLocale() {
- resolver.setLocale(request, response, Locale.GERMAN);
- assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN);
+ resolver.setLocaleContext(request, response, new SimpleLocaleContext(Locale.GERMAN));
+ assertThat(resolver.resolveLocaleContext(request).getLocale()).isEqualTo(Locale.GERMAN);
HttpSession session = request.getSession();
request = new MockHttpServletRequest();
request.setSession(session);
resolver = new SessionLocaleResolver();
- assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN);
+ assertThat(resolver.resolveLocaleContext(request).getLocale()).isEqualTo(Locale.GERMAN);
}
@Test
void resolveLocaleWithoutSession() throws Exception {
request.addPreferredLocale(Locale.TAIWAN);
- assertThat(resolver.resolveLocale(request)).isEqualTo(request.getLocale());
+ assertThat(resolver.resolveLocaleContext(request).getLocale()).isEqualTo(request.getLocale());
}
@Test
@@ -77,7 +78,7 @@ void resolveLocaleWithoutSessionAndDefaultLocale() throws Exception {
resolver.setDefaultLocale(Locale.GERMAN);
- assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN);
+ assertThat(resolver.resolveLocaleContext(request).getLocale()).isEqualTo(Locale.GERMAN);
}
@Test
@@ -85,7 +86,7 @@ void setLocaleToNullLocale() throws Exception {
request.addPreferredLocale(Locale.TAIWAN);
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, Locale.GERMAN);
- resolver.setLocale(request, response, null);
+ resolver.setLocaleContext(request, response, null);
Locale locale = (Locale) request.getSession().getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
assertThat(locale).isNull();
@@ -94,7 +95,7 @@ void setLocaleToNullLocale() throws Exception {
request.addPreferredLocale(Locale.TAIWAN);
request.setSession(session);
resolver = new SessionLocaleResolver();
- assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.TAIWAN);
+ assertThat(resolver.resolveLocaleContext(request).getLocale()).isEqualTo(Locale.TAIWAN);
}
@Test
@@ -103,7 +104,7 @@ void customDefaultLocaleFunction() {
resolver.setDefaultLocaleFunction(request -> Locale.GERMAN);
- assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN);
+ assertThat(resolver.resolveLocaleContext(request).getLocale()).isEqualTo(Locale.GERMAN);
}
@Test
diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/AbstractTagTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/AbstractTagTests.java
index 28c9a03708a2..8c28c1be1500 100644
--- a/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/AbstractTagTests.java
+++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/tags/AbstractTagTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2015 the original author or authors.
+ * Copyright 2002-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,7 +18,7 @@
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
-import org.springframework.web.servlet.LocaleResolver;
+import org.springframework.web.servlet.LocaleContextResolver;
import org.springframework.web.servlet.SimpleWebApplicationContext;
import org.springframework.web.servlet.ThemeResolver;
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
@@ -49,7 +49,7 @@ protected MockPageContext createPageContext() {
MockHttpServletResponse response = new MockHttpServletResponse();
if (inDispatcherServlet()) {
request.setAttribute(DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac);
- LocaleResolver lr = new AcceptHeaderLocaleResolver();
+ LocaleContextResolver lr = new AcceptHeaderLocaleResolver();
request.setAttribute(DispatcherServlet.LOCALE_RESOLVER_ATTRIBUTE, lr);
ThemeResolver tr = new FixedThemeResolver();
request.setAttribute(DispatcherServlet.THEME_RESOLVER_ATTRIBUTE, tr);
diff --git a/src/docs/asciidoc/web/webmvc.adoc b/src/docs/asciidoc/web/webmvc.adoc
index 841b3fc8aa6f..537938ae33e1 100644
--- a/src/docs/asciidoc/web/webmvc.adoc
+++ b/src/docs/asciidoc/web/webmvc.adoc
@@ -904,7 +904,7 @@ See <