MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Serialisieren Sie eine Klasse mit Jackson auf zwei verschiedene Arten

Wenn Sie sich die Optionen ansehen, können Sie anscheinend Eigenschaften annotieren, die nur angezeigt werden, wenn eine bestimmte View vorhanden ist wird an den ObjectMapper übergeben für die Serialisierung verwendet. Sie könnten also die Klasse bearbeiten:

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

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

und geben Sie Folgendes an:

class Views {
    static class WebView { }
}

und dann serialisieren, nachdem Sie eine Konfiguration mit der richtigen Ansicht erstellt haben:

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

Die würde es dann serialisieren. Wenn Sie beim Serialisieren mit dem MongoDB-Wrapper die Ansicht nicht angeben, würde die Methode ignoriert. Eigenschaften ohne eine JsonView-Annotation werden standardmäßig serialisiert, ein Verhalten, das Sie ändern können, indem Sie Folgendes angeben:

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

Weitere Informationen finden Sie im Jackson-Wiki.

Wie sich herausstellt, gibt es auch noch andere Alternativen:Es gibt Jackson MixIns, mit denen Sie das (De-) Serialisierungsverhalten von Teilen einer Klasse überschreiben können, ohne die Klasse selbst zu ändern, und ab Jackson 2.0 (sehr aktuelle Version) gibt es Filter , auch.