使用杰克逊,有没有办法在序列化的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"}]}
您可以这样编写自己的自定义序列化程序:
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();
}
}