2011-10-07 87 views
15

MongoDB似乎返回BSON/JSON對象。使用MongoDB Java驅動程序將DBObject轉換爲POJO

我認爲你肯定能夠檢索值作爲字符串,整數等,然後可以保存爲POJO。

我有一個DBObject(實例化爲BasicDBObject)作爲遍歷列表的結果...(cur.next())。

使用JSON serlialiser/deserialiser來獲取數據到POJO的唯一方法(除了使用某種持久性框架)?

我的方法是這樣的:

public List<User> findByEmail(String email){ 
     DBCollection userColl; 
     try { 
      userColl = Dao.getDB().getCollection("users"); } catch (UnknownHostException e) { e.printStackTrace(); } catch (MongoException e) { e.printStackTrace();} 
      DBCursor cur = userColl.find(); 
      List<User> usersWithMatchEmail = new ArrayList<User>(); 

      while(cur.hasNext()) { 
       // this is where I want to convert cur.next() into a <User> POJO 
       usersWithMatchEmail.add(cur.next()); 
      } 
     return null; 
    } 

編輯:這是很明顯的,只是做這樣的事情。

+0

愚蠢的我,你可以調用get()上DBOBJECT和獲得的價值。我會發布代碼。 – Ankur

回答

9

有幾個的Java庫,可以幫助你用它:

+0

謝謝,現在我試圖學習Java API,但最終會使用其中的一種。 – Ankur

+0

爲spring-data-mongodb +1,它的奇妙。有註釋來指定文檔ID,字段名稱,文檔引用;請注意,不支持級聯保存:http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/#mapping-usage-references –

+1

@AndrewB可以彈出數據mongodb be在EJB項目中使用?這是明智的做法嗎?因爲我的其餘項目對Spring沒有任何依賴! – Nikhil

3

您可以使用谷歌提供的GSON庫。這是它的example。還有很多其他的api可以用來將json轉換成pojo,比如jettision api等。

39

讓Spring做它已經爲此建立了東西繁重......

真正的竅門是:mongoTemplate.getConverter()讀取(讓Foo.class,OBJ)。

例如,使用DBCursor時 -

while (cursor.hasNext()) { 
    DBObject obj = cursor.next(); 
    Foo foo = mongoTemplate.getConverter().read(Foo.class, obj); 
    returnList.add(foo); 
} 

http://revelfire.com/spring-data-mongodb-convert-from-raw-query-dbobject/

+0

非常感謝您的支持。爲了快速入門,maven依賴項是:org.springframework.data/spring-data-mongodb/1.3.2.RELEASE – vikingsteve

+0

完美地工作 – cheloncio

+0

你值得一個cookie:D –

6

雖然後期的答案,有人可能會發現這很有用。

我用GSON從BasicDBObject轉換成我自己的POJO這是TinyBlogDBObject

TinyBlogDBObject obj = convertJSONToPojo(cursor.next().toString()); 

private static TinyBlogDBObject convertJSONToPojo(String json){ 

    Type type = new TypeToken<TinyBlogDBObject>(){}.getType(); 

    return new Gson().fromJson(json, type); 

} 
+1

這是行不通的,因爲ID以{「_id」:{「$ oid」:xxxx}}和gson抱怨的形式返回。您需要手動將其轉換爲字符串或替換jsonobject中的值。 – arisalexis

+0

或者你可以首先提供你自己的_id值作爲字符串,並避免這樣的問題。 –