Você provavelmente pode usar as anotações do Mixin para anotar seu POJO e o
BasicDBObject
(ou DBObject
), então as anotações não são um problema. Desde BasicDBOject
é um mapa, você pode usar @JsonAnySetter
no método put. m_objectMapper.addMixInAnnotations(YourMixIn.class, BasicDBObject.class);
public interface YourMixIn.class {
@JsonAnySetter
void put(String key, Object value);
}
Isso é tudo o que posso fazer, pois não tenho experiência com o MongoDB Object.
Atualização: MixIn são basicamente um mecanismo de Jackson para adicionar anotações a uma classe sem modificar essa classe. Este é um ajuste perfeito quando você não tem controle sobre a classe que deseja organizar (como quando é de um jar externo) ou quando não deseja sobrecarregar suas classes com anotações.
No seu caso aqui, você disse que
BasicDBObject
implementa o Map
interface, para que a classe tenha o método put
, conforme definido pela interface do mapa. Adicionando @JsonAnySetter para esse método, você diz a Jackson que sempre que ele encontrar uma propriedade que ele não conhece após a introspecção da classe, use o método para inserir a propriedade no objeto. A chave é o nome da propriedade e o valor é, bem, o valor da propriedade. Tudo isso combinado faz com que o mapa intermediário desapareça, já que Jackson irá converter diretamente para o
BasicDBOject
porque agora sabe como desserializar essa classe de Json. Com essa configuração, você pode fazer:DBObject dbo = m_objectMapper.convertValue(pojo, BasicDBObject.class);
Observe que não testei isso porque não trabalho com o MongoDB, portanto, pode haver algumas pontas soltas. No entanto, usei o mesmo mecanismo para casos de uso semelhantes sem nenhum problema. YMMV dependendo das aulas.