@@ -443,13 +443,16 @@ public List<MediaType> getAccept() {
443
443
* Set the acceptable language ranges,
444
444
* as specified by the {@literal Accept-Language} header.
445
445
* @see Locale.LanguageRange
446
+ * @since 5.0
446
447
*/
447
448
public void setAcceptLanguage (List <Locale .LanguageRange > languages ) {
448
449
Assert .notNull (languages , "'languages' must not be null" );
449
- DecimalFormat df = new DecimalFormat ("0.0" , DECIMAL_FORMAT_SYMBOLS );
450
- List <String > values = languages
451
- .stream ()
452
- .map (r -> (r .getWeight () == Locale .LanguageRange .MAX_WEIGHT ? r .getRange () : r .getRange () + ";q=" + df .format (r .getWeight ())))
450
+ DecimalFormat decimal = new DecimalFormat ("0.0" , DECIMAL_FORMAT_SYMBOLS );
451
+ List <String > values = languages .stream ()
452
+ .map (range ->
453
+ range .getWeight () == Locale .LanguageRange .MAX_WEIGHT ?
454
+ range .getRange () :
455
+ range .getRange () + ";q=" + decimal .format (range .getWeight ()))
453
456
.collect (Collectors .toList ());
454
457
set (ACCEPT_LANGUAGE , toCommaDelimitedString (values ));
455
458
}
@@ -458,6 +461,7 @@ public void setAcceptLanguage(List<Locale.LanguageRange> languages) {
458
461
* Return the acceptable language ranges,
459
462
* as specified by the {@literal Accept-Language} header
460
463
* @see Locale.LanguageRange
464
+ * @since 5.0
461
465
*/
462
466
public List <Locale .LanguageRange > getAcceptLanguage () {
463
467
String value = getFirst (ACCEPT_LANGUAGE );
@@ -467,6 +471,22 @@ public List<Locale.LanguageRange> getAcceptLanguage() {
467
471
return Collections .emptyList ();
468
472
}
469
473
474
+ /**
475
+ * A variant of {@link #getAcceptLanguage()} that converts each
476
+ * {@link java.util.Locale.LanguageRange} to a {@link Locale}.
477
+ * @since 5.0
478
+ */
479
+ public List <Locale > getAcceptLanguageAsLocales () {
480
+ List <Locale .LanguageRange > ranges = getAcceptLanguage ();
481
+ if (ranges .isEmpty ()) {
482
+ return Collections .emptyList ();
483
+ }
484
+ return ranges .stream ()
485
+ .map (range -> Locale .forLanguageTag (range .getRange ()))
486
+ .filter (locale -> StringUtils .hasText (locale .getDisplayName ()))
487
+ .collect (Collectors .toList ());
488
+ }
489
+
470
490
/**
471
491
* Set the (new) value of the {@code Access-Control-Allow-Credentials} response header.
472
492
*/
@@ -767,6 +787,7 @@ public ContentDisposition getContentDisposition() {
767
787
* as specified by the {@literal Content-Language} header.
768
788
* <p>Use {@code set(CONTENT_LANGUAGE, ...)} if you need
769
789
* to set multiple content languages.</p>
790
+ * @since 5.0
770
791
*/
771
792
public void setContentLanguage (Locale locale ) {
772
793
Assert .notNull (locale , "'locale' must not be null" );
@@ -779,6 +800,7 @@ public void setContentLanguage(Locale locale) {
779
800
* <p>Returns {@code null} when the content language is unknown.
780
801
* <p>Use {@code getValuesAsList(CONTENT_LANGUAGE)} if you need
781
802
* to get multiple content languages.</p>
803
+ * @since 5.0
782
804
*/
783
805
public Locale getContentLanguage () {
784
806
return getValuesAsList (CONTENT_LANGUAGE )
0 commit comments