当存在具有集合的属性时反序列化JSON

时间:2015-04-15 10:34:52

标签: java json spring jackson deserialization

我成功使用了Spring&杰克逊如下,

ResponseEntity<MyClass> result = restTemplate.exchange(
                    MYURL, HttpMethod.POST, entity,
                    MyClass.class);

这里MyClass是一个POJO,其中有一个字段映射到JSON中的每个字段。

我还可以映射有许多JSON“对象”的情况

ResponseEntity<MyClass[]> responseEntity = restTemplate.getForEntity(MYURL, MyClass[].class);

这解析了一个简单的对象数组,它工作正常。

但现在我的情况更复杂了。我有这样的JSON。

{
    "id": "1998",
    "items": {
        "1": {
            "map": {
                "1": "1.2",
                "2": "2.5",
                "3": "6.1",
                "4": "5.4",
                "5": "9.7",
                "6": "4.23",
                "7": "7.65",
                "8": "1.1",
                "9": "8.5",
                "10": "6.2"
            }
        }
    }
}

在“items”数组中,您可以将其他项目设为“2”或“3”。它们中的每一个都包含不同的“地图”。我不想将这些信息映射到一个对象中。

显然上面的数组方法不起作用,因为那里有属性“id”。

我如何为此设计POJO?我需要为此编写自定义反序列化器吗?

1 个答案:

答案 0 :(得分:0)

具有属性的ResponseObject:

Long id;
Set<Item> items = new HashSet<Item>();

其中Item对象可以是:

Long id;
Map<String, String> mapItems = new HashMap<String, String>();