2015-01-08 101 views
0

我想转换(解码?)一个mongoDB BasicDBObject(称为'文档')到一个POJO,,但Gson绊倒expiryTime,这是UTC日期(2013-10-08T10:00:00.000Z)。UTC日期到长转换:Gson - 预计很长,但是BEGIN_OBJECT

这里是斯卡拉命令:

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。

+0

'expiryTime'是一个'长'。 –

+0

是的,这是POJO中的一个Long,但它是Json中的UTC。我可以使用Gson将UTC转换为长整型吗? – satoukum

+0

你只需要一个特定的'TypeAdapter'来指定该字段。这没有什么意义。您应该为'MyObjt'使用'TypeAdapter'或使用具有每个字段转换器的JSON解析库。 –

回答

0

我添加了两行来将java.util.Date日期更新为Long,以便我可以解码它。这里的斯卡拉代码:

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]) 
} 
相关问题