Вероятно можете да използвате анотации на 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 в зависимост от класовете.