sql >> Base de Datos >  >> NoSQL >> MongoDB

Serialice una clase de dos maneras diferentes con Jackson

Al mirar las opciones, parece que puede anotar propiedades para que solo se muestren si una View determinada se pasa al ObjectMapper utilizado para la serialización. Por lo tanto, podría editar la clase:

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

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

y proporcionar:

class Views {
    static class WebView { }
}

y luego serializar después de crear una configuración con la vista correcta:

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

Que luego lo serializaría. No especificar la vista al serializar con el envoltorio MongoDB significaría que el método sería ignorado. Las propiedades sin una anotación JsonView se serializan de forma predeterminada, un comportamiento que puede cambiar especificando:

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

Hay más información disponible en Jackson Wiki.

Resulta que también hay otras alternativas:hay Jackson MixIns que le permitirían anular el comportamiento de (des) serialización de partes de una clase sin modificar la clase en sí, y a partir de Jackson 2.0 (versión muy reciente) hay filtros , también.