Возможно, вы захотите использовать JsonViews (изначально взято из http://wiki.fasterxml.com/JacksonJsonViews - теперь не работает - ссылка на веб-архив: https://web.archive.org/web/20170831135842/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'.