2015-01-08 100 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]) 
} 
相關問題