gson fails to parse using GsonBuilder.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
21,823
Only setting the required DateFormat is not sufficient.
You need to define an implementation of com.google.gson.JsonDeserializer. For ex.
import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
public class DateDeserializer implements JsonDeserializer<Date> {
@Override
public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
String date = element.getAsString();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
format.setTimeZone(TimeZone.getTimeZone("GMT"));
try {
return format.parse(date);
} catch (ParseException exp) {
System.err.println("Failed to parse Date:", exp);
return null;
}
}
}
and then register the above deserializer:
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
Author by
Elad Benda2
Updated on March 21, 2020Comments
-
Elad Benda2 about 4 years
I get this string from the server:
[ { "title":"spoil the ones u love today", "startDateTime":"2014-08-10T20:10:36.7158Z" }, { "title":"home made patisserie", "startDateTime":"2014-08-10T20:08:45.0218Z" } ]
and I try to parse it an object
public class Offer implements Serializable { public String title; public Date startDateTime; } Type collectionType = new TypeToken<ArrayList<Offer>>() {}.getType(); mOffersList.addAll((Collection<? extends Offer>) gson.fromJson(result, collectionType));
but when I define "startDate" as a Date
the collection I get back from gson is empty
When i define "startDate" as a String
the collection is filled correctly.
I want to change its date format. That's why I prefer saving it as a Date object.
I have tried
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").create;
and yet Gson fails to parse the server's string into
Date startDateTime
. Nothing is added to themOffersList
and it stays empty.What am I doing wrong?