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

Aru*_*ash 5 java spring-mvc jackson

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

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;
    }
Run Code Online (Sandbox Code Playgroud)

考虑我在地图中填充了一些值,现在我想序列化它并解开属性名称paramMap

预期输出:

{
    "Pojo": {
        "name": "value1",
        "age": 12,
        "date": "12/02/2015"
    }
}
Run Code Online (Sandbox Code Playgroud)

实际产量

{
    "Pojo": {
        "paramMap": {
            "name": "value1",
            "age": 12,
            "date": "12/02/2015"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Aru*_*ash 5

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

@JsonAnyGetter
public Map<String, Object> getParamMap() {
    return paramMap;
}
Run Code Online (Sandbox Code Playgroud)

注意:这在 Jackson 项目问题 #171 中仍然是开放的, 感谢Tatu Saloranta 这篇文章的作者