Подтвердить что ты не робот

Джексон меняет JsonIgnore динамически

У меня есть класс, и внутри него есть переменные. Иногда я хочу игнорировать некоторые поля, а иногда не при десериализации (возможно, при сериализации). Как я могу сделать это в Джексоне?

4b9b3361

Ответ 1

Для сериализации " свойства фильтрации" запись в блоге должна помочь. Сторона десериализации имеет меньшую поддержку, поскольку чаще всего требуется отфильтровать материал, который написан.

Один из возможных подходов заключается в подклассе JacksonAnnotationIntrospector, методе переопределения, который заставляет игнорировать методы (и/или поля) для использования любой логики, которую вы хотите.

Это может также помочь, если вы представили пример практического приложения, и что и почему вы пытаетесь предотвратить десериализацию.

Ответ 2

Возможно, вы захотите использовать JsonViews http://wiki.fasterxml.com/JacksonJsonViews

Цитирование:

Во-первых, определение представлений означает объявление классов; вы можете повторно использовать существующие или просто создавать фиктивные классы - они просто представляют идентификаторы с информацией о взаимоотношениях (ребенок наследует членство в представлении от родителей):

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

При таких определениях представления сериализация будет выполняться следующим образом:

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

Ответ 3

Вероятно, вам стоит посмотреть на функции модулей последних версий Jackson.

Одним из возможных механизмов было бы использовать BeanDeserializerModifier.

Я искал полезный онлайн-учебник или пример, но ничего не появляется сразу. Возможно, что-то будет работать, если вам известно больше о вашем контексте. Вы управляете своим ObjectMapper вручную или используете их в настройке JAX-RS, введенной в Spring или что?