Serializando JSON com metadados de classe

Sep 30 2020

Usei Gson e Jackson e ambos oferecem uma maneira de lidar com o polimorfismo. Por exemplo, com Jackson, você precisa declarar a classe com um @JsonSubTypese adicionar todos e cada um que @JsonSubTypes.Typevocê tiver. Coisa semelhante acontece com Gson.

Minha pergunta é se há uma opção para fazer funcionar como o MongoDB serializa os dados. Ele adiciona automaticamente um _classcampo de metadados. Com esse método, você não precisa registrar manualmente todos os subtipos que criou.

É possível?

Respostas

5 Ghokun Sep 30 2020 at 15:51

Você pode conseguir isso com jackson:

@JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY, property = "_class")
public abstract class AbstractModel {
    
}

public class ModelA extends AbstractModel {
    
}
...
mapper.writeValue(System.out, new ModelA());

Saídas:

{
  "_class" : "demo.ModelA"
}

Dessa forma, você não precisa adicionar subtipos json para todos os tipos que adicionar.