Prawdopodobnie możesz użyć adnotacji Mixin, aby dodać adnotacje do swojego POJO i BasicDBObject
(lub DBObject
), więc adnotacje nie stanowią problemu. Od BasicDBOject
to mapa, możesz użyć @JsonAnySetter
na metodzie put.
m_objectMapper.addMixInAnnotations(YourMixIn.class, BasicDBObject.class);
public interface YourMixIn.class {
@JsonAnySetter
void put(String key, Object value);
}
To wszystko, co mogę wymyślić, ponieważ nie mam żadnego doświadczenia z MongoDB Object.
Aktualizacja: MixIn są w zasadzie mechanizmem Jacksona do dodawania adnotacji do klasy bez modyfikowania tej klasy. Jest to idealne rozwiązanie, gdy nie masz kontroli nad klasą, którą chcesz zorganizować (np. gdy pochodzi z zewnętrznego słoika) lub gdy nie chcesz zaśmiecać swoich klas adnotacjami.
W twoim przypadku powiedziałeś, że BasicDBObject
implementuje Map
interfejs, dzięki czemu klasa ma metodę put
, zgodnie z definicją interfejsu mapy. Dodając @JsonAnySetter do tej metody, mówisz Jacksonowi, że za każdym razem, gdy znajdzie właściwość, której nie zna po introspekcji klasy, użyje metody do wstawienia właściwości do obiektu. Kluczem jest nazwa własności, a wartością jest, cóż, wartość własności.
Wszystko to razem sprawia, że mapa pośrednia znika, ponieważ Jackson bezpośrednio przekonwertuje na BasicDBOject
ponieważ teraz wie, jak deserializować tę klasę z Json. Dzięki tej konfiguracji możesz wykonać:
DBObject dbo = m_objectMapper.convertValue(pojo, BasicDBObject.class);
Zauważ, że nie testowałem tego, ponieważ nie pracuję z MongoDB, więc mogą być pewne luźne końce. Jednak bez problemu użyłem tego samego mechanizmu w podobnych przypadkach. YMMV w zależności od klas.