U kunt waarschijnlijk Mixin-annotaties gebruiken om uw POJO en het BasicDBObject
te annoteren (of DBObject
), dus annotaties zijn geen probleem. Sinds BasicDBOject
een kaart is, kunt u @JsonAnySetter
. gebruiken op de put-methode.
m_objectMapper.addMixInAnnotations(YourMixIn.class, BasicDBObject.class);
public interface YourMixIn.class {
@JsonAnySetter
void put(String key, Object value);
}
Dit is alles wat ik kan bedenken, aangezien ik geen ervaring heb met MongoDB Object.
Bijwerken: MixIn zijn in feite een Jackson-mechanisme om annotaties aan een klasse toe te voegen zonder de klasse te wijzigen. Dit is perfect geschikt als je geen controle hebt over de klas die je wilt rangschikken (zoals wanneer het uit een externe pot komt) of wanneer je je lessen niet wilt overladen met annotaties.
In jouw geval hier zei je dat BasicDBObject
implementeert de Map
interface, zodat de klasse de methode put
. heeft , zoals gedefinieerd door de kaartinterface. Door @JsonAnySetter
Dit alles gecombineerd zorgt ervoor dat de tussenliggende kaart verdwijnt, aangezien Jackson direct zal converteren naar het BasicDBOject
omdat het nu weet hoe het die klasse van Json moet deserialiseren. Met die configuratie kunt u het volgende doen:
DBObject dbo = m_objectMapper.convertValue(pojo, BasicDBObject.class);
Merk op dat ik dit niet heb getest omdat ik niet met MongoDB werk, dus er kunnen wat losse eindjes zijn. Ik heb echter hetzelfde mechanisme gebruikt voor vergelijkbare gebruiksgevallen zonder enig probleem. YMMV afhankelijk van de klassen.