Нужно ли иметь @JsonView({Views.ViewOne.class, Views.ViewTwo.class})
на уровне класса, чтобы у меня были неотмеченные поля, такие как z
, v
в выходном ответе, независимо от класса представления, переданного в ObjectMapper
?
Вам это не понадобится, когда MapperFeature.DEFAULT_VIEW_INCLUSION
включен в вашем экземпляре ObjectMapper
. Эта функция включена по умолчанию . Может быть, вы как-то отключили его?
Вот цитата из документации:
Функция, определяющая, включены ли свойства, у которых нет аннотаций видов, в представления сериализации JSON (для получения дополнительной информации о представлениях JSON смотрите @JsonView
). Если включено, неаннотированные свойства будут включены; если они отключены, они будут исключены.
Пример 1
Давайте рассмотрим следующий Example
класс:
@Data
public class Example {
private int a = 1;
private int b = 2;
private int c = 3;
}
И давайте сериализуем экземпляр Example
как JSON, используя:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(new Foo());
Он выдаст следующий JSON:
{"a":1,"b":2,"c":3}
Пример 2
Теперь давайте примем во внимание следующие представления:
public class Views {
public static class Foo {}
public static class Bar {}
}
И давайте применим представления к полям класса Example
:
@Data
public class Example {
@JsonView(Views.Foo.class)
private int a = 1;
@JsonView(Views.Bar.class)
private int b = 2;
private int c = 3;
}
И давайте сериализуем экземпляр Example
, используя Foo
view:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writerWithView(Views.Foo.class).writeValueAsString(new Example());
Он выдаст следующий JSON:
{"a":1,"c":3}
Теперь давайте отключим представление по умолчанию, включив его снова в сериализацию:
ObjectMapper mapper = new ObjectMapper();
mapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION);
String json = mapper.writerWithView(Views.Foo.class).writeValueAsString(new Example());
Он выдаст следующий JSON:
{"a":1}
Пример 3
Теперь давайте используем следующую конфигурацию представления в классе Example
:
@Data
@JsonView(Views.Foo.class)
public static class Example {
private int a = 1;
@JsonView(Views.Bar.class)
private int b = 2;
private int c = 3;
}
И давайте сериализуем экземпляр Example
, используя Foo
view:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writerWithView(Views.Foo.class).writeValueAsString(new Example());
Он выдаст следующий JSON:
{"a":1,"c":3}
Теперь давайте сериализуем экземпляр Example
, используя Bar
представление:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writerWithView(Views.Bar.class).writeValueAsString(new Example());
Он выдаст следующий JSON:
{"b":2}