MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mapeamento POJO eficiente de/para Java Mongo DBObject usando Jackson


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.