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

时间:2015-01-08 23:25:14

标签: java json mongodb scala

我正在尝试将mongoDB BasicDBObject(称为“文档”)转换(解码?)为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。

1 个答案:

答案 0 :(得分:0)

我添加了两行来将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])
}