File tree 2 files changed +28
-1
lines changed
main/java/org/springframework/http
test/java/org/springframework/http
2 files changed +28
-1
lines changed Original file line number Diff line number Diff line change @@ -509,7 +509,20 @@ public void setAcceptLanguage(List<Locale.LanguageRange> languages) {
509
509
*/
510
510
public List <Locale .LanguageRange > getAcceptLanguage () {
511
511
String value = getFirst (ACCEPT_LANGUAGE );
512
- return (StringUtils .hasText (value ) ? Locale .LanguageRange .parse (value ) : Collections .emptyList ());
512
+ if (StringUtils .hasText (value )) {
513
+ try {
514
+ return Locale .LanguageRange .parse (value );
515
+ }
516
+ catch (IllegalArgumentException ignored ) {
517
+ String [] tokens = StringUtils .tokenizeToStringArray (value , "," );
518
+ for (int i = 0 ; i < tokens .length ; i ++) {
519
+ tokens [i ] = StringUtils .trimTrailingCharacter (tokens [i ], ';' );
520
+ }
521
+ value = StringUtils .arrayToCommaDelimitedString (tokens );
522
+ return Locale .LanguageRange .parse (value );
523
+ }
524
+ }
525
+ return Collections .emptyList ();
513
526
}
514
527
515
528
/**
Original file line number Diff line number Diff line change @@ -517,6 +517,20 @@ void acceptLanguage() {
517
517
assertThat (headers .getAcceptLanguageAsLocales ()).first ().isEqualTo (Locale .FRANCE );
518
518
}
519
519
520
+ @ Test // gh-32259
521
+ void acceptLanguageTrailingSemicolon () {
522
+ String headerValue = "en-us,en;,nl;" ;
523
+ headers .set (HttpHeaders .ACCEPT_LANGUAGE , headerValue );
524
+ assertThat (headers .getFirst (HttpHeaders .ACCEPT_LANGUAGE )).isEqualTo (headerValue );
525
+
526
+ List <Locale .LanguageRange > expectedRanges = Arrays .asList (
527
+ new Locale .LanguageRange ("en-us" ),
528
+ new Locale .LanguageRange ("en" ),
529
+ new Locale .LanguageRange ("nl" )
530
+ );
531
+ assertThat (headers .getAcceptLanguage ()).isEqualTo (expectedRanges );
532
+ }
533
+
520
534
@ Test // SPR-15603
521
535
void acceptLanguageWithEmptyValue () {
522
536
this .headers .set (HttpHeaders .ACCEPT_LANGUAGE , "" );
You can’t perform that action at this time.
0 commit comments