I recently switched some of our serialization from Jackson
to Gson
. Found out that Jackson serializes dates to longs.
But, Gson serializes Date
First type adapter does the deserialization and the second one the serialization.
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, (JsonDeserializer) (json, typeOfT, context) -> new Date(json.getAsJsonPrimitive().getAsLong()))
.registerTypeAdapter(Date.class, (JsonSerializer) (date, type, jsonSerializationContext) -> new JsonPrimitive(date.getTime()))
.create();
Usage:
String jsonString = gson.toJson(objectWithDate1);
ClassWithDate objectWithDate2 = gson.fromJson(jsonString, ClassWithDate.class);
assert objectWithDate1.equals(objectWithDate2);