2011-10-07 6 views
15

MongoDBがBSON/JSONオブジェクトを返すようです。MongoDB Java Driverを使用してDBObjectをPOJOに変換

私は確かにあなたがPOJOとして保存することができる文字列、intsなどとして値を取得できると思った。

私は、リスト...(cur.next())を反復した結果、DBObject(BasicDBObjectとしてインスタンス化されています)を持っています。

JSONサーリシアザー/デシリアライザを使用するために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; 
    } 

EDIT:それはかなり明白だ、ちょうどこのような何かを行います。

+0

愚かな私です私自身のPOJOに変換するGSONを使用

、あなただけDBObjectを上()を取得呼び出して値を取得することができます。コードを投稿します。 – Ankur

答えて

9

それであなたを助けることができるいくつかのjava LIBSあり:

+0

ありがとうございます、今のところ私はJava APIを学ぼうとしていますが、最終的にそれらの1つを使用します。 – Ankur

+0

+1のspring-data-mongodbは、その素晴らしい。ドキュメントID、フィールド名、ドキュメント参照を指定するための注釈があります。カスケードセーブをサポートしていないことに注意してください:http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/#mapping-usage-references –

+1

@AndrewBはSpringデータのmongodbができますEJBプロジェクトで使用されていますか?そしてそれは賢明なことですか?私のプロジェクトの残りの部分には、春には何の依存もありません! – Nikhil

3

は、Googleが提供するGSONライブラリを使用することができます。ここにはexampleがあります。あなたがjettion apiなどのようにjsonをpojoに変換するために使用できる他の多くのAPIがあります。

39

レッツ春が本当のトリックがある...それはすでにこのために建てたもので

を重い物を持ち上げるの操作を行います。mongoTemplate.getConverter()(OBJ、FOO.CLASS)を読んで、。例えば

の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

ありがとうございます。クイックスタートの場合、依存関係は次のとおりです。org.springframework.data/spring-data-mongodb/1.3.2.RELEASE – vikingsteve

+0

完全に動作します – cheloncio

+0

あなたはクッキーに値するでしょう:D –

6

を、誰かがこれは役に立つかもしれません。私はBasicDBObjectから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が文句を言うため、これは機能しません。手動で文字列に変換するか、jsonオブジェクトの値を置き換える必要があります。 – arisalexis

+0

または、あなた自身の_id値を最初に文字列として指定し、そのような問題を避けることができます。 –

関連する問題