使用jackson反序列化lazylist

Hoo*_*oof 5 json jackson lazylist deserialization

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

        "myObject": ["org.apache.commons.collections.list.LazyList", [
            {
                "attr1": "asdasd",
                "attr2": 1234
            }
        ]],
Run Code Online (Sandbox Code Playgroud)

对象字段如下所示:

List<MyObject> myObject = ListUtils.lazyList(new ArrayList(), {new MyObject()} as Factory)
Run Code Online (Sandbox Code Playgroud)

然而,尝试使用Jackson ObjectMap反序列化上述JSON失败了,因为它无法找到LazyList的默认构造函数 - 这是有道理的.但是,如何指定此字段的反序列化方式?

错误信息:

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

赏金约束:

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

jjc*_*are 1

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

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