73
73
*/
74
74
public class DefaultHttpHeaderMapper implements HeaderMapper <HttpHeaders >, BeanFactoryAware , InitializingBean {
75
75
76
+ private static final String UNUSED = "unused" ;
77
+
76
78
protected final Log logger = LogFactory .getLog (getClass ());
77
79
78
80
public static final String ACCEPT = "Accept" ;
@@ -260,6 +262,10 @@ public class DefaultHttpHeaderMapper implements HeaderMapper<HttpHeaders>, BeanF
260
262
// Copy of 'org.springframework.http.HttpHeaders#GMT'
261
263
private static final ZoneId GMT = ZoneId .of ("GMT" );
262
264
265
+ // Copy of 'org.springframework.http.HttpHeaders#DATE_FORMATTER'
266
+ protected static final DateTimeFormatter DATE_FORMATTER =
267
+ DateTimeFormatter .ofPattern ("EEE, dd MMM yyyy HH:mm:ss zzz" , Locale .US ).withZone (GMT );
268
+
263
269
// Copy of 'org.springframework.http.HttpHeaders#DATE_FORMATS'
264
270
protected static final DateTimeFormatter [] DATE_FORMATS = new DateTimeFormatter [] {
265
271
DateTimeFormatter .RFC_1123_DATE_TIME ,
@@ -411,27 +417,28 @@ public void setUserDefinedHeaderPrefix(String userDefinedHeaderPrefix) {
411
417
@ Override
412
418
public void fromHeaders (MessageHeaders headers , HttpHeaders target ) {
413
419
if (this .logger .isDebugEnabled ()) {
414
- this .logger .debug (MessageFormat .format ("outboundHeaderNames={0}" ,
415
- CollectionUtils .arrayToList (this .outboundHeaderNames )));
420
+ this .logger .debug ("outboundHeaderNames=" + Arrays .toString (this .outboundHeaderNames ));
416
421
}
417
422
for (Entry <String , Object > entry : headers .entrySet ()) {
418
423
String name = entry .getKey ();
419
424
String lowerName = name .toLowerCase ();
420
- if (this . shouldMapOutboundHeader (lowerName )) {
425
+ if (shouldMapOutboundHeader (lowerName )) {
421
426
Object value = entry .getValue ();
422
427
if (value != null ) {
423
428
if (!HTTP_REQUEST_HEADER_NAMES_LOWER .contains (lowerName ) &&
424
429
!HTTP_RESPONSE_HEADER_NAMES_LOWER .contains (lowerName ) &&
425
430
!MessageHeaders .CONTENT_TYPE .equalsIgnoreCase (name )) {
426
431
// prefix the user-defined header names if not already prefixed
427
432
428
- name = StringUtils .startsWithIgnoreCase (name , this .userDefinedHeaderPrefix ) ? name :
429
- this .userDefinedHeaderPrefix + name ;
433
+ name =
434
+ StringUtils .startsWithIgnoreCase (name , this .userDefinedHeaderPrefix )
435
+ ? name
436
+ : this .userDefinedHeaderPrefix + name ;
430
437
}
431
438
if (this .logger .isDebugEnabled ()) {
432
439
this .logger .debug (MessageFormat .format ("setting headerName=[{0}], value={1}" , name , value ));
433
440
}
434
- this . setHttpHeader (target , name , value );
441
+ setHttpHeader (target , name , value );
435
442
}
436
443
}
437
444
}
@@ -448,36 +455,36 @@ public Map<String, Object> toHeaders(HttpHeaders source) {
448
455
this .logger .debug (MessageFormat .format ("inboundHeaderNames={0}" ,
449
456
CollectionUtils .arrayToList (this .inboundHeaderNames )));
450
457
}
451
- Map <String , Object > target = new HashMap <String , Object >();
458
+ Map <String , Object > target = new HashMap <>();
452
459
Set <String > headerNames = source .keySet ();
453
460
for (String name : headerNames ) {
454
461
String lowerName = name .toLowerCase ();
455
- if (this . shouldMapInboundHeader (lowerName )) {
462
+ if (shouldMapInboundHeader (lowerName )) {
456
463
if (!HTTP_REQUEST_HEADER_NAMES_LOWER .contains (lowerName )
457
464
&& !HTTP_RESPONSE_HEADER_NAMES_LOWER .contains (lowerName )) {
458
465
String prefixedName = StringUtils .startsWithIgnoreCase (name , this .userDefinedHeaderPrefix )
459
466
? name
460
467
: this .userDefinedHeaderPrefix + name ;
461
468
Object value = source .containsKey (prefixedName )
462
- ? this . getHttpHeader (source , prefixedName )
463
- : this . getHttpHeader (source , name );
469
+ ? getHttpHeader (source , prefixedName )
470
+ : getHttpHeader (source , name );
464
471
if (value != null ) {
465
472
if (this .logger .isDebugEnabled ()) {
466
473
this .logger .debug (MessageFormat .format ("setting headerName=[{0}], value={1}" , name , value ));
467
474
}
468
- this . setMessageHeader (target , name , value );
475
+ setMessageHeader (target , name , value );
469
476
}
470
477
}
471
478
else {
472
- Object value = this . getHttpHeader (source , name );
479
+ Object value = getHttpHeader (source , name );
473
480
if (value != null ) {
474
481
if (this .logger .isDebugEnabled ()) {
475
482
this .logger .debug (MessageFormat .format ("setting headerName=[{0}], value={1}" , name , value ));
476
483
}
477
484
if (CONTENT_TYPE .equalsIgnoreCase (name )) {
478
485
name = MessageHeaders .CONTENT_TYPE ;
479
486
}
480
- this . setMessageHeader (target , name , value );
487
+ setMessageHeader (target , name , value );
481
488
}
482
489
}
483
490
}
@@ -509,9 +516,10 @@ private boolean shouldMapOutboundHeader(String headerName) {
509
516
* When using the default response header name list, suppress the
510
517
* mapping of exclusions for specific headers.
511
518
*/
512
- if (this . containsElementIgnoreCase (this .excludedInboundStandardResponseHeaderNames , headerName )) {
519
+ if (containsElementIgnoreCase (this .excludedInboundStandardResponseHeaderNames , headerName )) {
513
520
if (this .logger .isDebugEnabled ()) {
514
- this .logger .debug (MessageFormat .format ("headerName=[{0}] WILL NOT be mapped (excluded)" , headerName ));
521
+ this .logger
522
+ .debug (MessageFormat .format ("headerName=[{0}] WILL NOT be mapped (excluded)" , headerName ));
515
523
}
516
524
return false ;
517
525
}
@@ -522,18 +530,19 @@ else if (this.isDefaultOutboundMapper) {
522
530
* When using the default request header name list, suppress the
523
531
* mapping of exclusions for specific headers.
524
532
*/
525
- if (this . containsElementIgnoreCase (this .excludedOutboundStandardRequestHeaderNames , headerName )) {
533
+ if (containsElementIgnoreCase (this .excludedOutboundStandardRequestHeaderNames , headerName )) {
526
534
if (this .logger .isDebugEnabled ()) {
527
- this .logger .debug (MessageFormat .format ("headerName=[{0}] WILL NOT be mapped (excluded)" , headerName ));
535
+ this .logger
536
+ .debug (MessageFormat .format ("headerName=[{0}] WILL NOT be mapped (excluded)" , headerName ));
528
537
}
529
538
return false ;
530
539
}
531
540
}
532
- return this . shouldMapHeader (headerName , outboundHeaderNamesLower );
541
+ return shouldMapHeader (headerName , outboundHeaderNamesLower );
533
542
}
534
543
535
544
protected final boolean shouldMapInboundHeader (String headerName ) {
536
- return this . shouldMapHeader (headerName , this .inboundHeaderNamesLower );
545
+ return shouldMapHeader (headerName , this .inboundHeaderNamesLower );
537
546
}
538
547
539
548
/**
@@ -580,7 +589,7 @@ private void setHttpHeader(HttpHeaders target, String name, Object value) {
580
589
if (value instanceof Collection <?>) {
581
590
Collection <?> values = (Collection <?>) value ;
582
591
if (!CollectionUtils .isEmpty (values )) {
583
- List <MediaType > acceptableMediaTypes = new ArrayList <MediaType >();
592
+ List <MediaType > acceptableMediaTypes = new ArrayList <>();
584
593
for (Object type : values ) {
585
594
if (type instanceof MediaType ) {
586
595
acceptableMediaTypes .add ((MediaType ) type );
@@ -602,7 +611,7 @@ else if (value instanceof MediaType) {
602
611
target .setAccept (Collections .singletonList ((MediaType ) value ));
603
612
}
604
613
else if (value instanceof String []) {
605
- List <MediaType > acceptableMediaTypes = new ArrayList <MediaType >();
614
+ List <MediaType > acceptableMediaTypes = new ArrayList <>();
606
615
for (String next : (String []) value ) {
607
616
acceptableMediaTypes .add (MediaType .parseMediaType (next ));
608
617
}
@@ -621,7 +630,7 @@ else if (ACCEPT_CHARSET.equalsIgnoreCase(name)) {
621
630
if (value instanceof Collection <?>) {
622
631
Collection <?> values = (Collection <?>) value ;
623
632
if (!CollectionUtils .isEmpty (values )) {
624
- List <Charset > acceptableCharsets = new ArrayList <Charset >();
633
+ List <Charset > acceptableCharsets = new ArrayList <>();
625
634
for (Object charset : values ) {
626
635
if (charset instanceof Charset ) {
627
636
acceptableCharsets .add ((Charset ) charset );
@@ -640,7 +649,7 @@ else if (charset instanceof String) {
640
649
}
641
650
}
642
651
else if (value instanceof Charset [] || value instanceof String []) {
643
- List <Charset > acceptableCharsets = new ArrayList <Charset >();
652
+ List <Charset > acceptableCharsets = new ArrayList <>();
644
653
Object [] values = ObjectUtils .toObjectArray (value );
645
654
for (Object charset : values ) {
646
655
if (charset instanceof Charset ) {
@@ -657,7 +666,7 @@ else if (value instanceof Charset) {
657
666
}
658
667
else if (value instanceof String ) {
659
668
String [] charsets = StringUtils .commaDelimitedListToStringArray ((String ) value );
660
- List <Charset > acceptableCharsets = new ArrayList <Charset >();
669
+ List <Charset > acceptableCharsets = new ArrayList <>();
661
670
for (String charset : charsets ) {
662
671
acceptableCharsets .add (Charset .forName (charset .trim ()));
663
672
}
@@ -673,7 +682,7 @@ else if (ALLOW.equalsIgnoreCase(name)) {
673
682
if (value instanceof Collection <?>) {
674
683
Collection <?> values = (Collection <?>) value ;
675
684
if (!CollectionUtils .isEmpty (values )) {
676
- Set <HttpMethod > allowedMethods = new HashSet <HttpMethod >();
685
+ Set <HttpMethod > allowedMethods = new HashSet <>();
677
686
for (Object method : values ) {
678
687
if (method instanceof HttpMethod ) {
679
688
allowedMethods .add ((HttpMethod ) method );
@@ -696,14 +705,14 @@ else if (method instanceof String) {
696
705
target .setAllow (Collections .singleton ((HttpMethod ) value ));
697
706
}
698
707
else if (value instanceof HttpMethod []) {
699
- Set <HttpMethod > allowedMethods = new HashSet <HttpMethod >();
708
+ Set <HttpMethod > allowedMethods = new HashSet <>();
700
709
Collections .addAll (allowedMethods , (HttpMethod []) value );
701
710
target .setAllow (allowedMethods );
702
711
}
703
712
else if (value instanceof String || value instanceof String []) {
704
713
String [] values = (value instanceof String []) ? (String []) value
705
714
: StringUtils .commaDelimitedListToStringArray ((String ) value );
706
- Set <HttpMethod > allowedMethods = new HashSet <HttpMethod >();
715
+ Set <HttpMethod > allowedMethods = new HashSet <>();
707
716
for (String next : values ) {
708
717
allowedMethods .add (HttpMethod .valueOf (next .trim ()));
709
718
}
@@ -763,8 +772,8 @@ else if (value instanceof String) {
763
772
try {
764
773
target .setDate (Long .parseLong ((String ) value ));
765
774
}
766
- catch (NumberFormatException e ) {
767
- target .setDate (this . getFirstDate ((String ) value , DATE ));
775
+ catch (@ SuppressWarnings ( UNUSED ) NumberFormatException e ) {
776
+ target .setDate (getFirstDate ((String ) value , DATE ));
768
777
}
769
778
}
770
779
else {
@@ -794,8 +803,8 @@ else if (value instanceof String) {
794
803
try {
795
804
target .setExpires (Long .parseLong ((String ) value ));
796
805
}
797
- catch (NumberFormatException e ) {
798
- target .setExpires (this . getFirstDate ((String ) value , EXPIRES ));
806
+ catch (@ SuppressWarnings ( UNUSED ) NumberFormatException e ) {
807
+ target .setExpires (getFirstDate ((String ) value , EXPIRES ));
799
808
}
800
809
}
801
810
else {
@@ -815,8 +824,8 @@ else if (value instanceof String) {
815
824
try {
816
825
target .setIfModifiedSince (Long .parseLong ((String ) value ));
817
826
}
818
- catch (NumberFormatException e ) {
819
- target .setIfModifiedSince (this . getFirstDate ((String ) value , IF_MODIFIED_SINCE ));
827
+ catch (@ SuppressWarnings ( UNUSED ) NumberFormatException e ) {
828
+ target .setIfModifiedSince (getFirstDate ((String ) value , IF_MODIFIED_SINCE ));
820
829
}
821
830
}
822
831
else {
@@ -827,20 +836,20 @@ else if (value instanceof String) {
827
836
}
828
837
}
829
838
else if (IF_UNMODIFIED_SINCE .equalsIgnoreCase (name )) {
830
- String ifUnmodifiedSinceValue = null ;
839
+ String ifUnmodifiedSinceValue ;
831
840
if (value instanceof Date ) {
832
- ifUnmodifiedSinceValue = this . formatDate (((Date ) value ).getTime ());
841
+ ifUnmodifiedSinceValue = formatDate (((Date ) value ).getTime ());
833
842
}
834
843
else if (value instanceof Number ) {
835
- ifUnmodifiedSinceValue = this . formatDate (((Number ) value ).longValue ());
844
+ ifUnmodifiedSinceValue = formatDate (((Number ) value ).longValue ());
836
845
}
837
846
else if (value instanceof String ) {
838
847
try {
839
- ifUnmodifiedSinceValue = this . formatDate (Long .parseLong ((String ) value ));
848
+ ifUnmodifiedSinceValue = formatDate (Long .parseLong ((String ) value ));
840
849
}
841
- catch (NumberFormatException e ) {
842
- long longValue = this . getFirstDate ((String ) value , IF_UNMODIFIED_SINCE );
843
- ifUnmodifiedSinceValue = this . formatDate (longValue );
850
+ catch (@ SuppressWarnings ( UNUSED ) NumberFormatException e ) {
851
+ long longValue = getFirstDate ((String ) value , IF_UNMODIFIED_SINCE );
852
+ ifUnmodifiedSinceValue = formatDate (longValue );
844
853
}
845
854
}
846
855
else {
@@ -862,7 +871,7 @@ else if (value instanceof String[]) {
862
871
else if (value instanceof Collection ) {
863
872
Collection <?> values = (Collection <?>) value ;
864
873
if (!CollectionUtils .isEmpty (values )) {
865
- List <String > ifNoneMatchList = new ArrayList <String >();
874
+ List <String > ifNoneMatchList = new ArrayList <>();
866
875
for (Object next : values ) {
867
876
if (next instanceof String ) {
868
877
ifNoneMatchList .add ((String ) next );
@@ -888,8 +897,8 @@ else if (value instanceof String) {
888
897
try {
889
898
target .setLastModified (Long .parseLong ((String ) value ));
890
899
}
891
- catch (NumberFormatException e ) {
892
- target .setLastModified (this . getFirstDate ((String ) value , LAST_MODIFIED ));
900
+ catch (@ SuppressWarnings ( UNUSED ) NumberFormatException e ) {
901
+ target .setLastModified (getFirstDate ((String ) value , LAST_MODIFIED ));
893
902
}
894
903
}
895
904
else {
@@ -937,12 +946,12 @@ else if (value instanceof String[]) {
937
946
}
938
947
else if (value instanceof Iterable <?>) {
939
948
for (Object next : (Iterable <?>) value ) {
940
- String convertedValue = null ;
949
+ String convertedValue ;
941
950
if (next instanceof String ) {
942
951
convertedValue = (String ) next ;
943
952
}
944
953
else {
945
- convertedValue = this . convertToString (value );
954
+ convertedValue = convertToString (value );
946
955
}
947
956
if (StringUtils .hasText (convertedValue )) {
948
957
target .add (name , convertedValue );
@@ -955,7 +964,7 @@ else if (value instanceof Iterable<?>) {
955
964
}
956
965
}
957
966
else {
958
- String convertedValue = this . convertToString (value );
967
+ String convertedValue = convertToString (value );
959
968
if (StringUtils .hasText (convertedValue )) {
960
969
target .set (name , convertedValue );
961
970
}
@@ -1016,7 +1025,7 @@ else if (IF_MODIFIED_SINCE.equalsIgnoreCase(name)) {
1016
1025
}
1017
1026
else if (IF_UNMODIFIED_SINCE .equalsIgnoreCase (name )) {
1018
1027
String unmodifiedSince = source .getFirst (IF_UNMODIFIED_SINCE );
1019
- return unmodifiedSince != null ? this . getFirstDate (unmodifiedSince , IF_UNMODIFIED_SINCE ) : null ;
1028
+ return unmodifiedSince != null ? getFirstDate (unmodifiedSince , IF_UNMODIFIED_SINCE ) : null ;
1020
1029
}
1021
1030
else if (LAST_MODIFIED .equalsIgnoreCase (name )) {
1022
1031
long lastModified = source .getLastModified ();
@@ -1064,6 +1073,7 @@ protected String convertToString(Object value) {
1064
1073
if (this .conversionService != null &&
1065
1074
this .conversionService .canConvert (TypeDescriptor .forObject (value ),
1066
1075
TypeDescriptor .valueOf (String .class ))) {
1076
+
1067
1077
return this .conversionService .convert (value , String .class );
1068
1078
}
1069
1079
return null ;
@@ -1087,10 +1097,10 @@ protected long getFirstDate(String headerValue, String headerName) {
1087
1097
+ "' header" );
1088
1098
}
1089
1099
1090
- protected String formatDate (long date ) {
1100
+ protected static String formatDate (long date ) {
1091
1101
Instant instant = Instant .ofEpochMilli (date );
1092
1102
ZonedDateTime zonedDateTime = ZonedDateTime .ofInstant (instant , GMT );
1093
- return DATE_FORMATS [ 0 ] .format (zonedDateTime );
1103
+ return DATE_FORMATTER .format (zonedDateTime );
1094
1104
}
1095
1105
1096
1106
/**
0 commit comments