使用jackson反序列化lazylist

时间:2013-06-28 13:54:06

标签: json jackson deserialization lazylist

我有一个对象使用org.apache.commons.collections.list.LazyList作为其中一个字段,这是一个序列化的ti JSON。 JSON看起来像这样:

        "myObject": ["org.apache.commons.collections.list.LazyList", [
            {
                "attr1": "asdasd",
                "attr2": 1234
            }
        ]],

对象字段如下所示:

List<MyObject> myObject = ListUtils.lazyList(new ArrayList(), {new MyObject()} as Factory)

然而,尝试使用Jackson ObjectMapper反序列化上述JSON失败了,因为它无法找到LazyList的默认构造函数 - 这是有道理的。但是,如何指定如何对该字段进行反序列化呢?

错误讯息:

  

[集合类型没有默认构造函数; class org.apache.commons.collections.list.LazyList,包含[simple type,class foo.bar.MyObject]]

恩惠的约束:

要收集赏金,需要使用自定义jackson反序列化程序来回答这个问题 - 自定义反序列化程序不能是特定于字段的!因此,没有使用特定类型的LazyList的自定义实现的解决方案将充分回答这个问题。

1 个答案:

答案 0 :(得分:1)

以下解决方案适用于List和Map集合对象,它也可能适用于您的。

@JsonDeserialize(contentAs=MyObject.class)
private List<MyObject> myObject = ListUtils.lazyList(new ArrayList(), {new MyObject()} as Factory);