sql >> Databáze >  >> NoSQL >> MongoDB

Efektivní POJO mapování do/z Java Mongo DBObject pomocí Jackson

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.



  1. Spring Data RedisTemplate:Serializace hodnoty a hashValue

  2. Java Spring Mongo Sort Problém s případem ignorování

  3. Doporučené postupy .NET pro připojení MongoDB?

  4. Nodejs se nemůže připojit k mongodb v cloudovém prostředí