MockHttpServletRequest preserves original Accept-Language header value

Issue: SPR-17566
This commit is contained in:
Juergen Hoeller 2018-12-04 22:07:43 +01:00
parent d3cdecc621
commit 9efea7eb73
3 changed files with 11 additions and 6 deletions

View File

@ -1013,12 +1013,14 @@ public class MockHttpServletRequest implements HttpServletRequest {
try { try {
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.ACCEPT_LANGUAGE, value.toString()); headers.add(HttpHeaders.ACCEPT_LANGUAGE, value.toString());
setPreferredLocales(headers.getAcceptLanguageAsLocales()); List<Locale> locales = headers.getAcceptLanguageAsLocales();
this.locales.clear();
this.locales.addAll(locales);
} }
catch (IllegalArgumentException ex) { catch (IllegalArgumentException ex) {
// Invalid Accept-Language format -> store plain header instead // Invalid Accept-Language format -> just store plain header
doAddHeaderValue(name, value, true);
} }
doAddHeaderValue(name, value, true);
} }
else { else {
doAddHeaderValue(name, value, false); doAddHeaderValue(name, value, false);

View File

@ -341,6 +341,7 @@ public class MockHttpServletRequestTests {
List<Locale> actual = Collections.list(request.getLocales()); List<Locale> actual = Collections.list(request.getLocales());
assertEquals(Arrays.asList(Locale.forLanguageTag("fr-ch"), Locale.forLanguageTag("fr"), assertEquals(Arrays.asList(Locale.forLanguageTag("fr-ch"), Locale.forLanguageTag("fr"),
Locale.forLanguageTag("en"), Locale.forLanguageTag("de")), actual); Locale.forLanguageTag("en"), Locale.forLanguageTag("de")), actual);
assertEquals(headerValue, request.getHeader("Accept-Language"));
} }
@Test @Test

View File

@ -1013,12 +1013,14 @@ public class MockHttpServletRequest implements HttpServletRequest {
try { try {
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.ACCEPT_LANGUAGE, value.toString()); headers.add(HttpHeaders.ACCEPT_LANGUAGE, value.toString());
setPreferredLocales(headers.getAcceptLanguageAsLocales()); List<Locale> locales = headers.getAcceptLanguageAsLocales();
this.locales.clear();
this.locales.addAll(locales);
} }
catch (IllegalArgumentException ex) { catch (IllegalArgumentException ex) {
// Invalid Accept-Language format -> store plain header instead // Invalid Accept-Language format -> just store plain header
doAddHeaderValue(name, value, true);
} }
doAddHeaderValue(name, value, true);
} }
else { else {
doAddHeaderValue(name, value, false); doAddHeaderValue(name, value, false);