我有Map<EquipmentType, Integer> equipment
来存储设备数量。
我想将此地图序列化为
{"equipment":
[
{"equipmentType":{},"quantity": 0},
...
]
}
我有一个自定义序列化器
public void serialize(Map<EquipmentType, Integer> value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
value.entrySet().forEach(entry -> {
try {
gen.writeObjectField("equipmentType", entry.getKey());
gen.writeNumberField("quantity", entry.getValue());
} catch (IOException e) {
e.printStackTrace();
}
});
gen.writeEndObject();
}
但它只写了一个入口集。
"equipment" :
{
"equipmentType" : {},
"quantity" : 1
}
如何将条目集连接到列表?
答案 0 :(得分:-2)
您目前正在为整个Map<EquipmentType, Integer>
编写单个对象。 Jackson对重复JSON对象字段的行为是覆盖,因此只有Map
中的最后一个条目将被写为您正在编写的单个JSON对象。
您想要启动一个JSON数组,将每个条目写为对象,然后关闭该数组。
例如,
public void serialize(Map<EquipmentType, Integer> value, JsonGenerator gen, SerializerProvider provider)
throws IOException {
gen.writeStartArray();
value.entrySet().forEach(entry -> {
try {
gen.writeStartObject();
gen.writeObjectField("equipmentType", entry.getKey());
gen.writeNumberField("quantity", entry.getValue());
gen.writeEndObject();
} catch (IOException e) {
e.printStackTrace();
}
});
gen.writeEndArray();
}
但是,你应该摆脱forEach
。使用普通for
语句。