Я хочу сериализовать класс 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
для сериализации значений одного перечисления.Есть еще некоторые проблемы с экранированными строками, но, по крайней мере, это работает.Однако мне интересно, можно ли это сделать аккуратно.