GSON抛出exception解析空Date字段

我正在使用GSON来反序列化一些JSON。 JSON是:

{ "employee_id": 297, "surname": "Maynard", "givenname": "Ron", "lastlogin": "", 

Employee对象有一个Date字段lastlogin:

 public class Employee { private Integer employee_id; private String surname; private String givenname; private Date lastlogin; 

我遇到的问题是,当未填充lastlogin值时,它是JSON中的空字符串,因此GSON解析器抛出:

 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) 

通常的方法是什么?

如果你不能控制输入(即JSon生成部分),但知道非空时应该是格式,你应该编写一个可以处理空值的自己的反序列化器,例如

  GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(Date.class, new JsonDeserializer() { 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(); 

请参阅https://sites.google.com/site/gson/gson-user-guide#TOC-Custom-Serialization-and-Deserializ

那是因为它是一个空字符串,Date不知道如何处理。 如果你看一下GSON代码,它会显示它只是使用DateFormat.parse盲解析字符串,它不能很好地处理引号。

你尝试过使用null吗? 如果为空,请尝试使用null。 从用于DateTypeAdapter的GSON代码的代码,它可以很好地处理JSONNull对象,它只是跳过它们。