sql >> Database teknologi >  >> NoSQL >> MongoDB

Effektiv POJO-kortlægning til/fra Java Mongo DBObject ved hjælp af Jackson

Du kan sandsynligvis bruge Mixin-annoteringer til at kommentere din POJO og BasicDBObject (eller DBObject ), så annoteringer er ikke et problem. Siden BasicDBOject er et kort, kan du bruge @JsonAnySetter på put-metoden.

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

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

Dette er alt, hvad jeg kan finde på, da jeg ikke har nogen erfaring med MongoDB Object.

Opdatering: MixIn er dybest set en Jackson-mekanisme til at tilføje annotering til en klasse uden at ændre den nævnte klasse. Dette er en perfekt pasform, når du ikke har kontrol over den klasse, du vil lede (f.eks. når den er fra en ekstern krukke), eller når du ikke ønsker at fylde dine klasser med annoteringer.

I dit tilfælde her sagde du det BasicDBObject implementerer Map interface, så klassen har metoden put , som defineret af kortgrænsefladen. Ved at tilføje @JsonAnySetter til den metode, fortæller du Jackson, at hver gang han finder en egenskab, som han ikke kender efter introspektion af klassen, skal han bruge metoden til at indsætte egenskaben til objektet. Nøglen er navnet på ejendommen, og værdien er, ja, ejendommens værdi.

Alt dette kombineret får det mellemliggende kort til at forsvinde, da Jackson vil konvertere direkte til BasicDBOject fordi den nu ved, hvordan man deserialiserer den klasse fra Json. Med den konfiguration kan du gøre:

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

Bemærk, at jeg ikke har testet dette, fordi jeg ikke arbejder med MongoDB, så der kan være nogle løse ender. Jeg har dog brugt den samme mekanisme til lignende tilfælde uden problemer. YMMV afhængig af klasserne.



  1. mongo-go-driver:indlejret OR/AND-forespørgselsfilter

  2. Dynamisk sortering med Redis

  3. Sagen om MongoDB hashed-indekser

  4. java.lang.NoClassDefFoundError ved brug af MongoDB-driver