使用jackson的多个Any-Setters?

时间:2014-03-19 09:47:01

标签: json jackson

我有一个动态字段,其中键是未知的,值可以是String或Object。 此外,字段本身可以是地图或只是单个值。 我如何指示Jackson根据它的值类型序列化/反序列化该字段? 我还想保存我的类型对象以在我的代码中使用,而不只是使用Map<String, Object>的地图。

public class MyPackage {

    @JsonProperty("versions")
    public Versions versions = new Versions();

    @JsonAnySetter
    public void add(String key, MyVersionObject value) {
        versions.put(key, value);
    }

    @JsonAnyGetter
    public Map<String, MyVersionObject> getMap() {
        return versions;
    }
}

此字段应接受的不同JSON:

{
    "versions": {
        "1.0": { ... MyVersionObject fields},
        "2.0": { ... MyVersionObject fields},
        "3.0": { ... MyVersionObject fields},
    }
}

或者

{
    "versions": {
        "3.0": "latest"
    }
}

1 个答案:

答案 0 :(得分:1)

听起来像输入是如此不规则,你无法动态地定义它。因此,请将值类型保留为Object;这会给你StringMap。从那以后,改变自己;手动或使用ObjectMapper.convertValue()方法。