Pravděpodobně můžete použít anotace Mixin k anotaci vašeho POJO a BasicDBObject
(nebo DBObject
), takže anotace nejsou problém. Od BasicDBOject
je mapa, můžete použít @JsonAnySetter
na metodě put.
m_objectMapper.addMixInAnnotations(YourMixIn.class, BasicDBObject.class);
public interface YourMixIn.class {
@JsonAnySetter
void put(String key, Object value);
}
To je vše, s čím mohu přijít, protože s MongoDB Object nemám žádné zkušenosti.
Aktualizace: MixIn jsou v podstatě Jacksonovým mechanismem pro přidání anotace do třídy bez úpravy uvedené třídy. To se perfektně hodí, když nemáte kontrolu nad třídou, kterou chcete zařadit (například když je z externího jara), nebo když nechcete své třídy zaplňovat poznámkami.
Ve vašem případě jste řekli, že BasicDBObject
implementuje Map
rozhraní, takže tato třída má metodu put
, jak je definováno mapovým rozhraním. Přidáním @JsonAnySetter k této metodě řeknete Jacksonovi, že kdykoli po introspekci třídy najde vlastnost, kterou nezná, použije metodu k vložení vlastnosti do objektu. Klíč je název vlastnosti a hodnota je, no, hodnota vlastnosti.
To vše dohromady způsobí, že přechodná mapa zmizí, protože Jackson převede přímo na BasicDBOject
protože nyní ví, jak deserializovat tuto třídu z Json. S touto konfigurací můžete:
DBObject dbo = m_objectMapper.convertValue(pojo, BasicDBObject.class);
Všimněte si, že jsem to netestoval, protože nepracuji s MongoDB, takže tam mohou být nějaké nedostatky. Bez problémů jsem však použil stejný mechanismus pro podobné případy použití. YMMV v závislosti na třídách.