Sie können wahrscheinlich Mixin-Anmerkungen verwenden, um Ihr POJO und das BasicDBObject
zu kommentieren (oder DBObject
), Anmerkungen sind also kein Problem. Seit BasicDBOject
eine Karte ist, können Sie @JsonAnySetter
verwenden auf der Put-Methode.
m_objectMapper.addMixInAnnotations(YourMixIn.class, BasicDBObject.class);
public interface YourMixIn.class {
@JsonAnySetter
void put(String key, Object value);
}
Das ist alles, was mir einfällt, da ich keinerlei Erfahrung mit MongoDB Object habe.
Aktualisierung: MixIn sind im Grunde ein Jackson-Mechanismus, um einer Klasse Anmerkungen hinzuzufügen, ohne diese Klasse zu ändern. Dies ist eine perfekte Lösung, wenn Sie keine Kontrolle über die Klasse haben, die Sie marshallen möchten (z. B. wenn sie aus einem externen JAR stammt) oder wenn Sie Ihre Klassen nicht mit Anmerkungen überladen möchten.
In Ihrem Fall hier sagten Sie, dass BasicDBObject
implementiert die Map
Schnittstelle, sodass diese Klasse die Methode put
hat , wie von der Kartenschnittstelle definiert. Durch Hinzufügen von @JsonAnySetter zu dieser Methode sagen Sie Jackson, dass er immer dann, wenn er eine Eigenschaft findet, die er nach der Selbstprüfung der Klasse nicht kennt, die Methode verwenden soll, um die Eigenschaft in das Objekt einzufügen. Der Schlüssel ist der Name der Eigenschaft und der Wert ist, nun ja, der Wert der Eigenschaft.
All dies zusammen lässt die Zwischenkarte verschwinden, da Jackson direkt in das BasicDBOject
konvertiert weil es jetzt weiß, wie diese Klasse von Json deserialisiert wird. Mit dieser Konfiguration können Sie:
DBObject dbo = m_objectMapper.convertValue(pojo, BasicDBObject.class);
Beachten Sie, dass ich dies nicht getestet habe, da ich nicht mit MongoDB arbeite, daher könnte es einige lose Enden geben. Ich habe jedoch den gleichen Mechanismus für ähnliche Anwendungsfälle ohne Probleme verwendet. YMMV abhängig von den Klassen.