MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Sérialisez une classe de deux manières différentes avec Jackson

En regardant les options, il semble que vous puissiez annoter les propriétés pour qu'elles ne s'affichent que si une View donnée est passé à ObjectMapper utilisé pour la sérialisation. Vous pourriez ainsi éditer la classe :

public static class FooReference {
    public DBRef<Foo> foo;

    @JsonView(Views.WebView.class)
    public Foo getFoo() {
        return foo.fetch();
    }
}

et fournissez :

class Views {
    static class WebView { }
}

puis sérialiser après avoir créé une configuration avec la bonne vue :

SerializationConfig conf = objectMapper.getSerializationConfig().withView(Views.WebView.class);
objectMapper.setSerializationConfig(conf);

Qui le sérialiserait alors. Ne pas spécifier la vue lors de la sérialisation avec le wrapper MongoDB signifierait que la méthode serait ignorée. Les propriétés sans annotation JsonView sont sérialisées par défaut, un comportement que vous pouvez modifier en spécifiant :

objectMapper.configure(SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false);

Plus d'informations sont disponibles sur le Jackson Wiki.

Il s'avère qu'il existe encore d'autres alternatives :il existe Jackson MixIns qui vous permettrait de remplacer le comportement de (dé) sérialisation des parties d'une classe sans modifier la classe elle-même, et à partir de Jackson 2.0 (version très récente), il existe des filtres , aussi.