11package org .baeldung .gson .deserialization ;
22
33import java .lang .reflect .Type ;
4- import java .util .HashMap ;
4+ import java .text .ParseException ;
5+ import java .util .Date ;
6+ import java .util .Map ;
57
8+ import org .apache .commons .lang3 .time .DateUtils ;
69import org .baeldung .gson .entities .Employee ;
7- import org .baeldung .gson .serialization .HashMapDeserializer ;
10+ import org .baeldung .gson .serialization .MapDeserializer ;
11+ import org .baeldung .gson .serialization .StringDateMapDeserializer ;
812import org .junit .Assert ;
913import org .junit .Test ;
1014import org .slf4j .Logger ;
1620import com .google .gson .internal .LinkedTreeMap ;
1721import com .google .gson .reflect .TypeToken ;
1822
19- public class HashMapDeserializationUnitTest {
23+ public class MapDeserializationUnitTest {
2024
21- private static final Logger logger = LoggerFactory .getLogger (HashMapDeserializationUnitTest .class );
25+ private static final Logger logger = LoggerFactory .getLogger (MapDeserializationUnitTest .class );
2226
2327 @ Test
24- public void whenUsingHashMapClass_thenShouldReturnMapWithDefaultClasses () {
28+ public void whenUsingMapClass_thenShouldReturnMapWithDefaultClasses () {
2529
2630 String jsonString = "{'employee.name':'Bob','employee.salary':10000, 'employee.active':true, "
2731 + "'employee':{'id':10, 'name': 'Bob Willis', 'address':'London'}}" ;
2832
2933 Gson gson = new Gson ();
30- HashMap map = gson .fromJson (jsonString , HashMap .class );
34+ Map map = gson .fromJson (jsonString , Map .class );
3135
3236 logger .info ("The converted map: {}" , map );
3337 Assert .assertEquals (4 , map .size ());
@@ -43,7 +47,7 @@ public void whenUsingJsonStringWithDuplicateKey_thenShouldThrowJsonSyntaxExcepti
4347 + "'employee.active':true, " + "'employee':{'id':10, 'name': 'Bob Willis', 'address':'London'}}" ;
4448
4549 Gson gson = new Gson ();
46- HashMap map = gson .fromJson (jsonString , HashMap .class );
50+ Map map = gson .fromJson (jsonString , Map .class );
4751
4852 logger .info ("The converted map: {}" , map );
4953 }
@@ -56,8 +60,8 @@ public void whenUsingTypeToken_thenShouldReturnMapWithProperClass() {
5660 + "'Steve':{'id':10, 'name': 'Steven Waugh', 'address':'Australia'}}" ;
5761
5862 Gson gson = new Gson ();
59- Type empMapType = new TypeToken <HashMap <String , Employee >>(){}.getType ();
60- HashMap <String , Employee > nameEmployeeMap = gson .fromJson (jsonString , empMapType );
63+ Type empMapType = new TypeToken <Map <String , Employee >>(){}.getType ();
64+ Map <String , Employee > nameEmployeeMap = gson .fromJson (jsonString , empMapType );
6165
6266 logger .info ("The converted map: {}" , nameEmployeeMap );
6367 Assert .assertEquals (3 , nameEmployeeMap .size ());
@@ -70,11 +74,11 @@ public void whenUsingCustomDeserializer_thenShouldReturnMapWithProperClass() {
7074 String jsonString = "{'employee.name':'Bob','employee.salary':10000, 'employee.active':true, "
7175 + "'employee':{'id':10, 'name': 'Bob Willis', 'address':'London'}}" ;
7276
73- Type type = new TypeToken <HashMap <String , Object >>(){}.getType ();
77+ Type type = new TypeToken <Map <String , Object >>(){}.getType ();
7478 Gson gson = new GsonBuilder ()
75- .registerTypeAdapter (type , new HashMapDeserializer ())
79+ .registerTypeAdapter (type , new MapDeserializer ())
7680 .create ();
77- HashMap <String , Object > blendedMap = gson .fromJson (jsonString , type );
81+ Map <String , Object > blendedMap = gson .fromJson (jsonString , type );
7882
7983 logger .info ("The converted map: {}" , blendedMap );
8084 Assert .assertEquals (4 , blendedMap .size ());
@@ -83,4 +87,26 @@ public void whenUsingCustomDeserializer_thenShouldReturnMapWithProperClass() {
8387
8488 }
8589
90+ @ Test
91+ public void whenUsingCustomDateDeserializer_thenShouldReturnMapWithDate () {
92+ String jsonString = "{'Bob': '2017/06/01', 'Jennie':'2015/01/03'}" ;
93+ Type type = new TypeToken <Map <String , Date >>(){}.getType ();
94+ Gson gson = new GsonBuilder ()
95+ .registerTypeAdapter (type , new StringDateMapDeserializer ())
96+ .create ();
97+ Map <String , Date > empJoiningDateMap = gson .fromJson (jsonString , type );
98+
99+ logger .info ("The converted map: {}" , empJoiningDateMap );
100+ logger .info ("The map class {}" , empJoiningDateMap .getClass ());
101+ Assert .assertEquals (2 , empJoiningDateMap .size ());
102+ Assert .assertEquals (Date .class , empJoiningDateMap .get ("Bob" ).getClass ());
103+ Date dt = null ;
104+ try {
105+ dt = DateUtils .parseDate ("2017-06-01" , "yyyy-MM-dd" );
106+ Assert .assertEquals (dt , empJoiningDateMap .get ("Bob" ));
107+ } catch (ParseException e ) {
108+ logger .error ("Could not parse date" , e );
109+ }
110+ }
111+
86112}
0 commit comments