Skip to content

Commit a1410d9

Browse files
committed
Merge branch '6.2.x'
2 parents dc58074 + b6a5402 commit a1410d9

File tree

3 files changed

+30
-17
lines changed

3 files changed

+30
-17
lines changed

spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java

+11-8
Original file line numberDiff line numberDiff line change
@@ -755,14 +755,17 @@ else if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
755755
}
756756
else if (HttpHeaders.CONTENT_LANGUAGE.equalsIgnoreCase(name)) {
757757
String contentLanguages = value.toString();
758-
HttpHeaders headers = new HttpHeaders();
759-
headers.add(HttpHeaders.CONTENT_LANGUAGE, contentLanguages);
760-
Locale language = headers.getContentLanguage();
761-
setLocale(language != null ? language : Locale.getDefault());
762-
// Since setLocale() sets the Content-Language header to the given
763-
// single Locale, we have to explicitly set the Content-Language header
764-
// to the user-provided value.
765-
doAddHeaderValue(HttpHeaders.CONTENT_LANGUAGE, contentLanguages, true);
758+
// only set the locale if we replace the header or if there was none before
759+
if (replaceHeader || !this.headers.containsKey(HttpHeaders.CONTENT_LANGUAGE)) {
760+
HttpHeaders headers = new HttpHeaders();
761+
headers.add(HttpHeaders.CONTENT_LANGUAGE, contentLanguages);
762+
Locale language = headers.getContentLanguage();
763+
this.locale = language != null ? language : Locale.getDefault();
764+
doAddHeaderValue(HttpHeaders.CONTENT_LANGUAGE, contentLanguages, replaceHeader);
765+
}
766+
else {
767+
doAddHeaderValue(HttpHeaders.CONTENT_LANGUAGE, contentLanguages, false);
768+
}
766769
return true;
767770
}
768771
else if (HttpHeaders.SET_COOKIE.equalsIgnoreCase(name)) {

spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java

+8-1
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,14 @@ void contentLanguageHeaderWithMultipleValues() {
290290
assertThat(response.getLocale()).isEqualTo(Locale.ITALIAN);
291291
}
292292

293+
@Test // gh-34488
294+
void shouldAddMultipleContentLanguage() {
295+
response.addHeader(HttpHeaders.CONTENT_LANGUAGE, "en");
296+
response.addHeader(HttpHeaders.CONTENT_LANGUAGE, "fr");
297+
assertThat(response.getHeaders(HttpHeaders.CONTENT_LANGUAGE)).contains("en", "fr");
298+
assertThat(response.getLocale()).isEqualTo(Locale.ENGLISH);
299+
}
300+
293301
@Test
294302
void contentLengthSetsHeader() {
295303
response.setContentLength(66);
@@ -672,5 +680,4 @@ void outputStreamShouldFailWhenWriterCalled() throws IOException {
672680

673681
}
674682

675-
676683
}

spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockHttpServletResponse.java

+11-8
Original file line numberDiff line numberDiff line change
@@ -755,14 +755,17 @@ else if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(name)) {
755755
}
756756
else if (HttpHeaders.CONTENT_LANGUAGE.equalsIgnoreCase(name)) {
757757
String contentLanguages = value.toString();
758-
HttpHeaders headers = new HttpHeaders();
759-
headers.add(HttpHeaders.CONTENT_LANGUAGE, contentLanguages);
760-
Locale language = headers.getContentLanguage();
761-
setLocale(language != null ? language : Locale.getDefault());
762-
// Since setLocale() sets the Content-Language header to the given
763-
// single Locale, we have to explicitly set the Content-Language header
764-
// to the user-provided value.
765-
doAddHeaderValue(HttpHeaders.CONTENT_LANGUAGE, contentLanguages, true);
758+
// only set the locale if we replace the header or if there was none before
759+
if (replaceHeader || !this.headers.containsKey(HttpHeaders.CONTENT_LANGUAGE)) {
760+
HttpHeaders headers = new HttpHeaders();
761+
headers.add(HttpHeaders.CONTENT_LANGUAGE, contentLanguages);
762+
Locale language = headers.getContentLanguage();
763+
this.locale = language != null ? language : Locale.getDefault();
764+
doAddHeaderValue(HttpHeaders.CONTENT_LANGUAGE, contentLanguages, replaceHeader);
765+
}
766+
else {
767+
doAddHeaderValue(HttpHeaders.CONTENT_LANGUAGE, contentLanguages, false);
768+
}
766769
return true;
767770
}
768771
else if (HttpHeaders.SET_COOKIE.equalsIgnoreCase(name)) {

0 commit comments

Comments
 (0)