java - 使用 Jackson 注释在 POJO 中序列化和解包 Map 对象

标签 java spring-mvc jackson

我有一个 POJO,其 Map 类型的属性名为 paramMap。

import java.util.HashMap;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
import com.fasterxml.jackson.annotation.JsonUnwrapped;

@JsonTypeInfo(include=As.WRAPPER_OBJECT, use=Id.NAME)
public class Pojo {

    @JsonUnwrapped
    private Map<String, Object> paramMap = new HashMap<String, Object>();

    public Map<String, Object> getParamMap() {
        return paramMap;
    }

    public void setParamMap(Map<String, Object> paramMap) {
        this.paramMap = paramMap;
    }

考虑到我已经在 map 中填充了一些值,现在我想序列化它并打开属性名称 paramMap

预期输出:

{
    "Pojo": {
        "name": "value1",
        "age": 12,
        "date": "12/02/2015"
    }
}

实际输出

{
    "Pojo": {
        "paramMap": {
            "name": "value1",
            "age": 12,
            "date": "12/02/2015"
        }
    }
}

最佳答案

答案是here ,在getParamMap()的getter方法中使用Jackson注解@JsonAnyGetter我们可以得到预期的输出。

@JsonAnyGetter
public Map<String, Object> getParamMap() {
    return paramMap;
}

注意:这在 Jackson 项目中仍然是开放的 Issue #171 感谢帖子的Tatu Saloranta作者

关于java - 使用 Jackson 注释在 POJO 中序列化和解包 Map 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31160077/

相关文章:

java - 如何正确且线程安全地重用Jackson ObjectReader?

java - Spring 4.2.3 与 Hibernate validator 5.2.2.Final 不起作用

java - 将 Jsonpath 输出映射到 POJO 列表

java - 将弱加密算法从 PHP 转换为 Coldfusion 或 Java

java - 康维斯生命游戏 - 滑翔机模式在第一次突变后不起作用?

java - 使用java从远程位置读取文件

java - 替换和转换字符串

java - 我可以在 Spring MVC Controller 中获取当前的 webflow 状态吗?

java - Spring MVC 和 Hibernate 的每个请求一个 session 模式

java - Spring MVC 可以反序列化 JSON(可以是对象或数组)吗?