Конвертировать DBObject в POJO с помощью MongoDB Java Driver
MongoDB, похоже, возвращает объекты BSON/JSON.
Я думал, что вы наверняка сможете получить значения в виде строк, целых и т. Д., Которые затем можно сохранить как POJO.
У меня есть DBObject (создается как BasicDBObject) в результате итерации по списку... (cur.next()).
Является ли единственный способ (кроме использования какой-либо среды персистентности) передать данные в POJO для использования Serialialiser / Deserialiser JSON?
Мой метод выглядит так:
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;
}
РЕДАКТИРОВАТЬ: Это довольно очевидно, просто сделайте что-то вроде этого.
5 ответов
Есть несколько java-библиотек, которые могут вам помочь:
- Morhpia - http://code.google.com/p/morphia/
- Spring Data для MongoDB - http://www.springsource.org/spring-data/mongodb
Пусть Spring сделает тяжелую работу с тем, что уже построил для этого...
Настоящий трюк: mongoTemplate.getConverter(). Read(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/
Хотя поздний ответ, кто-то может найти это полезным.
Я использую 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. Предоставьте bean-компоненту MongoDatabase правильную CodecRegistry
@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. Аннотировать POJOS
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. Запрос mongoDB и получить POJOS
MongoCollection<Document> collection = mongoDatabase.getCollection("product");
Document query = new Document();
List<ProductEntity> products = collection.find(query, ProductEntity.class).into(new ArrayList<>());
Пожалуйста, проверьте мой ответ в другом посте
POJO для org.bson.Document и наоборот