首先,我知道我正在尝试做的事情可以使用自定义 JsonSerializer
来完成,但我想知道是否有针对此的更少样板代码解决方案。
在 Spring MVC
中,我想将一个 Map
序列化为一对夫妇的列表。假设我想返回这样一个 Map
:
Map<String, String> res = new HashMap<>();
res.put("key1", "value1");
res.put("key2", "value2");
默认的序列化结果会给出这样的 JSON
:
{key1: value1, key2: value2}
有没有办法在不使用自定义 JsonSerializer
的情况下使用类似这样的东西?
[{key: "key1", value: "value1"}, {key: "key2", value: "value2"}]
我正在使用 Spring-Boot 1.3
和默认版本的 Spring MVC
和 Jackson
。
最佳答案
由于我更喜欢可重用的解决方案,并且找不到标准的解决方案,因此我使用自定义的 JsonSerializer
实现了它,如下所示:
public class MapToCoupleArraySerializer extends JsonSerializer<Map<?, ?>>{
@Override
public void serialize(Map<?, ?> value, JsonGenerator generator,
SerializerProvider serializers) throws IOException,
JsonProcessingException {
generator.writeStartArray();
for (Entry<?, ?> entry : value.entrySet()){
generator.writeStartObject();
generator.writeObjectField("key", entry.getKey());
generator.writeObjectField("value", entry.getValue());
generator.writeEndObject();
}
generator.writeEndArray();
}
}
并以传统的 Spring
方式使用它:
public class MyClassToSerialize{
@JsonSerialize(using = MapToCoupleArraySerializer .class)
private Map<Key, Value> recipes;
// ...
}
关于java - 在 Spring MVC 中使用 Jackson 将 Map 序列化为一对数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34063334/