java - jsoninclude - jsonignore conditional
Jackson cambiar JsonIgnore dinĂ¡micamente (3)
Tengo una clase y hay variables dentro de ella también. Algunas veces quiero ignorar algunos campos y otras no cuando deserializo (quizás también al serializar). ¿Cómo puedo hacerlo en Jackson?
Es posible que desee utilizar JsonViews (lo tomó originalmente de http://wiki.fasterxml.com/JacksonJsonViews - roto ahora - enlace del archivo web: https://web.archive.org/web/20170831135842/http://wiki.fasterxml.com/JacksonJsonViews )
Citándolo
Primero, definir vistas significa declarar clases; puede reutilizar las existentes, o simplemente crear clases falsas; son solo identificadores con información de relación (el hijo hereda la pertenencia de vista de los padres):
// View definitions:
class Views {
static class Public { }
static class ExtendedPublic extends PublicView { }
static class Internal extends ExtendedPublicView { }
}
public class Bean {
// Name is public
@JsonView(Views.Public.class) String name;
// Address semi-public
@JsonView(Views.ExtendPublic.class) Address address;
// SSN only for internal usage
@JsonView(Views.Internal.class) SocialSecNumber ssn;
}
Con tales definiciones de vista, la serialización se haría así:
// short-cut:
objectMapper.writeValueUsingView(out, beanInstance, ViewsPublic.class);
// or fully exploded:
objectMapper.getSerializationConfig().setSerializationView(Views.Public.class);
// (note: can also pre-construct config object with ''mapper.copySerializationConfig''; reuse)
objectMapper.writeValue(out, beanInstance); // will use active view set via Config
// or, starting with 1.5, more convenient (ObjectWriter is reusable too)
objectMapper.viewWriter(ViewsPublic.class).writeValue(out, beanInstance);
and result would only contain ''name'', not ''address'' or ''ssn''.
Para la serialización, la entrada de blog de " propiedades de filtrado " debería ayudar. El lado de la deserialización tiene menos soporte, ya que es más común querer filtrar las cosas que están escritas.
Un posible enfoque es la subclase JacksonAnnotationIntrospector
, anular los métodos que introspeccionan la ignorabilidad de los métodos (y / o campos) para usar la lógica que desee.
También puede ser útil si da un ejemplo de aplicación práctica, es decir, qué y por qué está tratando de evitar que se deserialice.
Probablemente debería mirar la característica de los módulos de las versiones recientes de Jackson.
Un posible mecanismo sería utilizar un BeanDeserializerModifier .
He estado buscando un tutorial o ejemplo útil en línea, pero no aparece nada de inmediato. Podría ser posible elaborar algo si se conoce más de su contexto. ¿Está administrando sus ObjectMapper
s manualmente, o usándolos en un entorno JAX-RS, inyectado en Spring, o qué?