MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Ефективно POJO картографиране към/от Java Mongo DBObject с помощта на Jackson

Вероятно можете да използвате анотации на Mixin, за да коментирате вашия POJO и BasicDBObject (или DBObject ), така че анотациите не са проблем. От BasicDBOject е карта, можете да използвате @JsonAnySetter на метода put.

m_objectMapper.addMixInAnnotations(YourMixIn.class, BasicDBObject.class);

public interface YourMixIn.class {
    @JsonAnySetter
    void put(String key, Object value);
}

Това е всичко, което мога да измисля, тъй като нямам опит с MongoDB Object.

Актуализация: MixIn са основно механизъм на Джаксън за добавяне на анотация към клас без промяна на споменатия клас. Това е идеално решение, когато нямате контрол над класа, който искате да подредите (като когато е от външен буркан) или когато не искате да претрупвате класовете си с анотация.

Във вашия случай тук казахте, че BasicDBObject внедрява Map интерфейс, така че този клас има метода put , както е дефинирано от интерфейса на картата. Чрез добавяне на @JsonAnySetter към този метод казвате на Джаксън, че всеки път, когато намери свойство, което не знае след интроспекция на класа, да използва метода, за да вмъкне свойството в обекта. Ключът е името на свойството, а стойността е стойността на свойството.

Всичко това комбинирано кара междинната карта да изчезне, тъй като Jackson директно ще конвертира към BasicDBOject защото сега знае как да десериализира този клас от Json. С тази конфигурация можете да направите:

DBObject dbo = m_objectMapper.convertValue(pojo, BasicDBObject.class);

Обърнете внимание, че не съм тествал това, защото не работя с MongoDB, така че може да има някои свободни краища. Въпреки това използвах същия механизъм за подобни случаи на употреба без никакъв проблем. YMMV в зависимост от класовете.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Причинено от:org.bson.BsonInvalidOperationException:Невалидно състояние INITIAL

  2. Преглед на Percona Backup за MongoDB

  3. Обектите не са валидни като дъщерни данни на React от MongoDB

  4. Импортирайте CSV данни като масив в MongoDB с помощта на mongoimport

  5. mongod и mongo командите не работят на Windows 10