Convertir DBObject en POJO en utilisant MongoDB Java Driver

MongoDB semble renvoyer des objets BSON/JSON.

j'ai pensé que vous seriez sûrement capable de récupérer des valeurs comme des chaînes, des ints, etc. qui peut ensuite être sauvé comme POJO.

j'ai un DBObject (instanciated as a BasicDBObject) à la suite d'une itération sur une liste ... (cur.prochain.))(

Est le seul moyen (autre que d'utiliser une sorte de persistance cadre) pour obtenir les données dans un POJO d'utiliser un JSON serlialiser/deserialiser?

Ma méthode ressemble ceci:

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: c'est assez évident, il suffit de faire quelque chose comme ça.

15
demandé sur Ankur 2011-10-07 11:27:18

5 réponses

Il y a quelques libs java qui peut vous aider avec ça:

9
répondu Igor Artamonov 2011-10-07 07:34:35

laisser le printemps faire le levage lourd avec ce qu'il a déjà construit pour cela...

le vrai truc est: mongoTemplate.getConverter ().lire (Foo.classe, obj);

par exemple, en utilisant 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/

40
répondu chris mathias 2013-06-13 08:54:16

Si une réponse tardive , quelqu'un pourrait trouver cela utile.

j'utilise GSON pour convertir de BasicDBObject à mon propre POJO qui est 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);

}
6
répondu cherit 2014-01-06 03:20:15

Vous pouvez utiliser GSON bibliothèque fournie par Google. Voici le exemple. Il y a beaucoup d'autres api que vous pouvez utiliser pour convertir json en pojo comme l'api de jettisation,etc.

3
répondu Anand Soni 2011-12-28 04:38:04

1. Fournir aux haricots MongoDatabase un bon Registre de la corégulation

@Bean public MongoDatabase mongoDatabase() {
    PojoCodecProvider pojoCodecProvider = PojoCodecProvider.builder().automatic(true).build();
    CodecRegistry pojoCodecRegistry = CodecRegistries.fromRegistries(MongoClient.getDefaultCodecRegistry(), CodecRegistries.fromProviders(pojoCodecProvider));
    MongoClient mongoClient = new MongoClient("localhost", 27017);
    return mongoClient.getDatabase("example_db_name").withCodecRegistry(pojoCodecRegistry);
}

2. Annoter les POJOS!--5-->

public class ProductEntity {

    @BsonProperty("name") public final String name;
    @BsonProperty("description") public final String description;
    @BsonProperty("thumb") public final ThumbEntity thumbEntity;

    @BsonCreator
    public ProductEntity(
            @BsonProperty("name") String name,
            @BsonProperty("description") String description,
            @BsonProperty("thumb") ThumbEntity thumbEntity) {
        this.name = name;
        this.description = description;
        this.thumbEntity = thumbEntity;
    }
}

public class ThumbEntity {

    @BsonProperty("width") public final Integer width;
    @BsonProperty("height") public final Integer height;
    @BsonProperty("url") public final String url;

    @BsonCreator
    public ThumbEntity(
            @BsonProperty("width") Integer width,
            @BsonProperty("height") Integer height,
            @BsonProperty("url") String url) {
        this.width = width;
        this.height = height;
        this.url = url;
    }
}

3. Requête mongoDB et obtenir POJOS

MongoCollection<Document> collection = mongoDatabase.getCollection("product");
Document query = new Document();
List<ProductEntity> products = collection.find(query, ProductEntity.class).into(new ArrayList<>());

s'il vous Plaît vérifier ma réponse dans l'autre post

POJO à org.bfils.Document et vice Versa

1
répondu kamildab_84 2018-04-19 21:01:18