2222import com .fasterxml .jackson .databind .*;
2323import com .fasterxml .jackson .databind .deser .ContextualDeserializer ;
2424import com .fasterxml .jackson .databind .deser .ContextualKeyDeserializer ;
25- import com .fasterxml .jackson .databind .deser .ResolvableDeserializer ;
2625import com .fasterxml .jackson .databind .deser .std .StdDeserializer ;
2726import com .fasterxml .jackson .databind .jsontype .TypeDeserializer ;
2827import com .fasterxml .jackson .databind .type .MapLikeType ;
2928
3029import java .io .Serializable ;
3130import java .util .Comparator ;
3231
33- abstract class MaplikeDeserializer <T > extends StdDeserializer <T > implements ResolvableDeserializer , ContextualDeserializer {
32+ abstract class MaplikeDeserializer <T > extends StdDeserializer <T > implements ContextualDeserializer {
3433
3534 private static final long serialVersionUID = 1L ;
3635
3736 final MapLikeType mapType ;
3837
39- Comparator <Object > keyComparator ;
38+ final Comparator <Object > keyComparator ;
4039 final KeyDeserializer keyDeserializer ;
4140 final TypeDeserializer elementTypeDeserializer ;
4241 final JsonDeserializer <?> elementDeserializer ;
4342
44- MaplikeDeserializer (MapLikeType mapType , Comparator < Object > keyComparator , KeyDeserializer keyDeserializer ,
43+ MaplikeDeserializer (MapLikeType mapType , KeyDeserializer keyDeserializer ,
4544 TypeDeserializer elementTypeDeserializer , JsonDeserializer <?> elementDeserializer ) {
4645 super (mapType );
4746 this .mapType = mapType ;
48- this .keyComparator = keyComparator ;
47+ this .keyComparator = createKeyComparator ( mapType . getKeyType ()) ;
4948 this .keyDeserializer = keyDeserializer ;
5049 this .elementTypeDeserializer = elementTypeDeserializer ;
5150 this .elementDeserializer = elementDeserializer ;
5251 }
5352
53+ private Comparator <Object > createKeyComparator (JavaType keyType ) {
54+ if (Comparable .class .isAssignableFrom (keyType .getRawClass ())) {
55+ @ SuppressWarnings ("unchecked" )
56+ Comparator <Object > comparator = (Comparator <Object > & Serializable ) (o1 , o2 ) -> ((Comparable <Object >) o1 ).compareTo (o2 );
57+ return comparator ;
58+ } else {
59+ return (Comparator <Object > & Serializable ) (o1 , o2 ) -> o1 .toString ().compareTo (o2 .toString ());
60+ }
61+ }
62+
5463 /**
5564 * Creates a new deserializer from the original one (this).
5665 *
@@ -63,17 +72,6 @@ abstract MaplikeDeserializer<T> createDeserializer(KeyDeserializer keyDeserializ
6372 TypeDeserializer elementTypeDeserializer ,
6473 JsonDeserializer <?> elementDeserializer );
6574
66- @ SuppressWarnings ("unchecked" )
67- @ Override
68- public void resolve (DeserializationContext ctxt ) throws JsonMappingException {
69- JavaType keyType = mapType .getKeyType ();
70- if (Comparable .class .isAssignableFrom (keyType .getRawClass ())) {
71- keyComparator = (Comparator <Object > & Serializable ) (o1 , o2 ) -> ((Comparable <Object >) o1 ).compareTo (o2 );
72- } else {
73- keyComparator = (Comparator <Object > & Serializable ) (o1 , o2 ) -> o1 .toString ().compareTo (o2 .toString ());
74- }
75- }
76-
7775 @ Override
7876 public JsonDeserializer <?> createContextual (DeserializationContext context , BeanProperty property ) throws JsonMappingException {
7977 KeyDeserializer keyDeser = keyDeserializer ;
0 commit comments