Включить поле с индексом массива в сериализацию списка - PullRequest
1 голос
/ 08 февраля 2020

Используя Джексона, есть ли способ добавить поле в сериализованный json с индексом элемента в списке?

public class A {
  private static List<B> bs = new LinkedArrayList<>();
}

public class B {
  private String b;
} 

Ожидаемый результат:

{"bs": [{"index":1, "b":"b1"}, {"index":2, "b":"b2"}]}

1 Ответ

0 голосов
/ 08 февраля 2020

Вы можете написать свой собственный сериализатор, например так:

public static class A {
    @JsonSerialize(using = BListSerializer.class)
    private List<B> bs;

    public A(List<B> bs) {
        this.bs = bs;
    }
}

public static class B {
    private String b;

    public B(String b) {
        this.b = b;
    }
}

public static class BListSerializer extends JsonSerializer<List<B>> {

    @Override
    public void serialize(List<B> listOfB, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeStartArray();
        for (int i = 0; i < listOfB.size(); i++) {
            jsonGenerator.writeStartObject();
            jsonGenerator.writeNumberField("index", i+1);
            jsonGenerator.writeStringField("b", listOfB.get(i).b);
            jsonGenerator.writeEndObject();
        }
        jsonGenerator.writeEndArray();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...