I'm using GSON to deserialise some JSON. The JSON is:
{
"employee_id": 297,
"surname": "Maynard",
"givenname": "Ron",
"lastlogin": "",
...
The Employee Object has a Date field lastlogin:
public class Employee {
private Integer employee_id;
private String surname;
private String givenname;
private Date lastlogin;
The problem I have is that when the lastlogin value isn't populated, it's an empty String in the JSON, so the GSON parser throws:
java.text.ParseException: Unparseable date: ""
at java.text.DateFormat.parse(DateFormat.java:337)
at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:79)
at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:66)
What's the usual way around this?
If you can't control the input (i.e. the JSon generating part) but know the format as it should be when not empty, you should just write an own deserializer that can handle empty values, like e.g.
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
@Override
public Date deserialize(final JsonElement json, final Type typeOfT, final JsonDeserializationContext context)
throws JsonParseException {
try {
return df.parse(json.getAsString());
} catch (ParseException e) {
return null;
}
}
});
Gson gson = gsonBuilder.create();
See https://sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserializ
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With