2011-10-07 19 views
15

MongoDB parece devolver objetos BSON/JSON.Convertir DBObject a un POJO usando el controlador de MongoDB Java

Pensé que seguramente sería capaz de recuperar valores como Strings, ints etc. que luego pueden guardarse como POJO.

Tengo un DBObject (instanciado como un objeto BasicDBObject) como resultado de iterar sobre una lista ... (cur.next()).

¿Es la única forma (aparte de utilizar algún tipo de marco de persistencia) para obtener los datos en un POJO para usar un serializador/deserializador JSON?

Mi método es el siguiente:

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: Es bastante obvio, simplemente hacer algo como esto.

+0

Estúpido de mí, sólo puede llamar a get () en un dbobject y obtener el valor. Publicaré el código. – Ankur

Respuesta

9

Hay unas pocas librerías de Java que pueden ayudarle con ella:

+0

Gracias, por ahora estoy tratando de aprender la API de Java pero usaré una de ellas eventualmente. – Ankur

+0

+1 para spring-data-mongodb, es fantástico. Tiene anotaciones para especificar ID de documento, nombres de campo, referencias de documentos; tenga en cuenta que no hay soporte para las salvaciones en cascada: http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/#mapping-usage-references –

+1

@AndrewB puede Spring data mongodb be utilizado en un proyecto EJB? ¿Y es algo sabio de hacer? ¡Ya que el resto de mi proyecto no depende de Spring en absoluto! – Nikhil

3

Usted puede utilizar GSON biblioteca proporcionada por Google. Aquí está el example de él. Hay muchas otras API que puedes usar para convertir json en pojo como jettision api, etc.

39

Let Primavera hacer el trabajo pesado con el material que ya ha construido para este ...

El verdadero truco es: mongoTemplate.getConverter() leer (Foo.class, obj);.

Por ejemplo, cuando se utiliza un 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

Muchas gracias por esto. Para un inicio rápido, la dependencia de maven es: org.springframework.data/spring-data-mongodb/1.3.2.RELEASE – vikingsteve

+0

Funciona perfectamente – cheloncio

+0

Te mereces una cookie: D –

6

Aunque una respuesta tardía, alguien podría resultar útil.

utilizo GSON convertir de BasicDBObject a mi propia POJO que es 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

esto no funciona debido a la identificación devuelta en el formulario {"_id": {"$ oid": xxxx} y gson se queja. Necesita convertirlo manualmente a una cadena o reemplazar el valor en un jsonobject. – arisalexis

+0

O puede proporcionar sus propios valores de _id como cadenas en primer lugar, y evitar problemas como ese. –

Cuestiones relacionadas