Пользовательская сериализация Collection <T>с использованием Jackson - PullRequest
4 голосов
/ 14 марта 2011

Я хотел бы преобразовать коллекцию Java, например,

public Collection<SomeDTO> getPages()
{
    return pages;
}

в массив json, например:

pages: [{DTO}, {DTO}, {DTO}]

Это работает из коробки, но я бы хотелТеперь нравится не использовать сериализацию по умолчанию для SomeDTO.В частности, я хотел бы выписать объект, который включает в себя комбинацию значений и некоторые дополнительные вычисления на основе SomeDTO.

Я пытался использовать @JsonSerialize(using=Serializer), но когда это применено к КоллекцииМетод, он ожидает, что я сам сериализирую коллекцию.Это выполнимо, но я предпочитаю просто определить, как ПРОСТО сериализуются DTO.

Идеи?

Ответы [ 2 ]

3 голосов
/ 15 марта 2011

Это может не помочь сразу, но проблема с @JsonSerialize заключается в том, что в отличие от @JsonDeserialize, который имеет как «использование» (для самого типа, как ArrayList), так и «contentUsing» (для типа значения); @JsonSerialize не имеет последнего до Jackson 1.8 (он существует в транке).

Но вы можете зарегистрировать пользовательский сериализатор для типа SomeDTO, если хотите, и он будет использоваться при сериализации коллекций, которые имеют их в качестве типов значений. Есть несколько способов регистрации таких пользовательских сериализаторов; один из них - просто добавить @JsonSerializer (используя = ...) к объявлению SomeDTO. И если вы не можете добавить его в определение класса (сторонний класс), вы можете использовать смешанные аннотации для связывания аннотаций.

0 голосов
/ 14 марта 2011

Рассматривали ли вы добавление геттеров в SomeDto для дополнительных полей, которые вы хотите сериализовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...