java - 在 Spring MVC 中使用 Jackson 将 Map 序列化为一对数组

标签 java json spring-mvc jackson

首先,我知道我正在尝试做的事情可以使用自定义 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 MVCJackson

最佳答案

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

相关文章:

java - 正则表达式从字符串中提取以逗号分隔的字符串

json - 呈现为浮点值的零的JSON裁剪

c# - 处理不同命名空间中重复类的最佳实践

java - 使用自定义 View 解析器和自定义 View 的 Spring MVC AJAX 和 JSON

java - 如何让 Spring MVC+HATEOAS 将资源列表编码为 HAL?

java - 在一个 JFrame 中拖动并移动两个形状

java - ChromeDriver for Facebook 在 JAVA 中登录?

javascript - JSON.parse() 没有给出预期的结果

java - 我们如何使用Spring获取应用程序根目录的绝对路径?

java - 如何将一些值从一个类转移到另一个类?