Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring MVC中使用Jackson将地图序列化为一对夫妇的数组_Java_Json_Spring Mvc_Jackson - Fatal编程技术网

Java 在Spring MVC中使用Jackson将地图序列化为一对夫妇的数组

Java 在Spring MVC中使用Jackson将地图序列化为一对夫妇的数组,java,json,spring-mvc,jackson,Java,Json,Spring Mvc,Jackson,首先,我知道我要做的事情可以使用定制的JsonSerializer来完成,但我想知道是否有一个较少的样板代码解决方案 在springmvc中,我想将Map序列化为一个夫妇列表。假设我想返回这样一张地图: Map<String, String> res = new HashMap<>(); res.put("key1", "value1"); res.put("key2", "value2"); 有没有一种方法可以在不使用自定义JsonSerializer的情况下使用类似

首先,我知道我要做的事情可以使用定制的
JsonSerializer
来完成,但我想知道是否有一个较少的样板代码解决方案

springmvc
中,我想将
Map
序列化为一个夫妇列表。假设我想返回这样一张
地图

Map<String, String> res = new HashMap<>();
res.put("key1", "value1");
res.put("key2", "value2");
有没有一种方法可以在不使用自定义
JsonSerializer
的情况下使用类似的东西

[{key: "key1", value: "value1"}, {key: "key2", value: "value2"}]

我正在使用默认版本的
Spring-Boot 1.3
Spring-MVC
Jackson
尝试序列化
条目,而不是映射本身:

Map.Entry[] entries = myMap.entrySet().toArray(new Map.Entry[]{});

我没有尝试,但结果应该与您想要的非常相似。

由于我更喜欢可重用的解决方案,并且找不到标准解决方案,我使用自定义的
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();
    }    
}

这听起来是个好办法。如果
贴图
是另一个对象的属性,您会怎么做?是否应将此对象转换为包含
项的DTO
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();
    }    
}
public class MyClassToSerialize{

    @JsonSerialize(using = MapToCoupleArraySerializer .class)
    private Map<Key, Value> recipes;

    // ...
}