Использовать сериализацию по умолчанию для перечислений в настраиваемом сериализаторе - PullRequest
0 голосов
/ 10 декабря 2018

Я хочу сериализовать класс Foo со списком значений перечисления с именем Bar с использованием Jackson 2.9.6.

public class Foo {
    @JsonProperty("myBars")
    List<Bar> bars;
}

и

public enum Bar {
    @JsonProperty("Jane")
    JOHN,

    @JsonProperty("Roe")
    DOE
}

По умолчаниювыходные данные сериализации

{
    "myBars": ["Jane", "Roe"]
}

Однако я хочу, чтобы сериализация вывела

{
    "myBars": "Jane;Roe"
}

Поэтому я добавил собственный сериализатор для поля bars, который сериализуется следующим образом:

public void serialize(List<Object> list, JsonGenerator gen, SerializerProvider serializers) throws IOException {
    gen.writeObject(StringUtils.join(list, ";")); // StringUtils from Apache Commons
}

Неудивительно, что это приводит к

{
    "myBars": "JOHN;DOE"
}

Вопрос: Как использовать мой собственный сериализатор, сохраняя сериализацию по умолчанию для значений перечисления?

Мое решение до сих пор состоит в том, чтобы перебрать список и использовать отдельный ObjectMapper для сериализации значений одного перечисления.Есть еще некоторые проблемы с экранированными строками, но, по крайней мере, это работает.Однако мне интересно, можно ли это сделать аккуратно.

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