UTC 日期到长转换:Gson - 预计很长但 BEGIN_OBJECT

UTC Dates to Long conversion: Gson - Expected a long but was BEGIN_OBJECT

我正在尝试将 mongoDB BasicDBObject(称为 'document')转换(解码?)为 POJO,但是 Gson 遇到了 expiryTime,这是一个 UTC日期 (2013-10-08T10:00:00.000Z).

这是 scala 命令:

gson.fromJson(document.toString(), classOf[MyObj])

我读到注册 TypeAdapter 可能会有用,它看起来像这样:

val gson: Gson = new GsonBuilder().registerTypeAdapter(classOf[org.joda.time.DateTime], new DateTimeTypeConverter).serializeNulls.create

关于如何为这个日期问题注册 TypeAdapter 有什么想法吗?


错误:

Expected a long but was BEGIN_OBJECT

POJO:

public class MyObj { 
  private IdObj id; 
  private String uid;
  private Long expiryTime;
}

public class IdObj { 
  private String guid; 
  private Long timestamp;
}

JSON:

{  
   "_id":{  
      "guid":"guid",
      "timestamp":1381226400000
   },
   "uid":"uid",
   "expiryTime":{  
      "$date":"2013-10-08T10:00:00.000Z"
   }
}

我正在使用 Scala 2.10。

我添加了两行来将 java.util.Date 日期更新为 Long,以便我可以对其进行解码。这是 Scala 代码:

def decodeDocument(document : BasicDBObject) : MyObj = {
  val currentTime : Date = Objects.firstNonNull[java.util.Date](document.get("expiryTime").asInstanceOf[java.util.Date], new Date())
  document.put("expiryTime", currentTime.getTime());
  gson.fromJson(document.toString, classOf[com.expedia.www.travelgraph.user.news.entities.NewsItem])
}