Могу ли я сериализовать свойство с помощью Jackson @JsonView?

У меня есть сложный класс в моем REST API:

class Complicated {
    String foo
    Integer bar
    Instant baz
    ...
    // lots more
}

У меня также есть другой класс, который содержит коллекцию Complicated:

class HasComplications {
    String description

    List<Complicated> complications
}

Когда я сериализую свой HasComplications (с Spring MVC), я хочу только фрагмент каждого Complicated:

{
    description: "hello world",
    complications: [ {
      foo: "foo1",
      bar: 42
    ] }
}

Когда я напрямую сериализую Complicated, Я могу использовать @JsonView сказать Джексону, какой набор свойств сериализовать:

class Complicated {
    @JsonView(Views.Snippet) String foo
    @JsonView(Views.Snippet) Integer bar
    Instant baz
    ...
    // lots more
}

Тем не менее, когда я сериализую Complicated транзитивно в complications собственность, Джексон сериализует все свойства. Есть ли способ для меня декларативно сказать ему "использовать это представление при сериализации этого свойства"?

class HasComplications {
    String description

    @UseJsonView(Views.Snippet)
    List<Complicated> complications
}

1 ответ

Решение

В настоящее время такой функциональности нет.

Одна вещь, которую вы можете сделать, это использовать @JsonIgnoreProperties на имущество. Тем не менее, я думаю, что это будет работать только для значений POJO, а не для содержимого Listс или MapТак что это не поможет вам здесь. Подать вопрос, чтобы сделать эту работу для структурированных типов может иметь смысл.

Другие вопросы по тегам