Jackson mudar JsonIgnore dinamicamente

Eu tenho uma aula e há variables ​​dentro dela também. Às vezes, quero ignorar alguns campos e, às vezes, não quando faço a desserialização (talvez na serialização também). Como posso fazer isso em Jackson?

Para serialização, a input de blog ” propriedades de filtragem ” deve ajudar. O lado de desserialização tem menos suporte, já que é mais comum querer filtrar o material que está escrito.

Uma abordagem possível é subclassificar JacksonAnnotationIntrospector , replace método (s) que introspectam a ignorabilidade de methods (e / ou campos) para usar qualquer lógica que você queira.

Também pode ajudar se você der um exemplo de aplicação prática, ou seja, o que e por que você está tentando evitar ser desserializado.

Você pode querer usar o JsonViews http://wiki.fasterxml.com/JacksonJsonViews

Citando isto:

Primeiro, definir vistas significa declarar classs; você pode reutilizar as existentes, ou apenas criar classs falsas – elas são apenas identificadores de exibição com informações de relacionamento (o filho herda a associação da exibição dos pais):

  // 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; } 

Com essas definições de exibição, a serialização seria feita da seguinte forma:

  // 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'. 

Você provavelmente deve olhar para o recurso de módulos de versões recentes de Jackson.

Um mecanismo possível seria usar um BeanDeserializerModifier .

Eu tenho procurado por um tutorial on-line útil ou exemplo, mas nada aparece imediatamente. Pode ser possível trabalhar algo se for mais conhecido do seu contexto. Você está gerenciando seu ObjectMapper manualmente, ou usando-os em uma configuração JAX-RS, injetado no Spring, ou o que?