5

我有一个对象,它使用 aorg.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 的默认构造函数 - 这是有道理的。但是我怎样才能指定如何反序列化这个字段呢?

错误信息:

[collection type; 没有默认构造函数;org.apache.commons.collections.list.LazyList 类,包含 [简单类型,类 foo.bar.MyObject]]

赏金限制:

要收集赏金,需要使用自定义杰克逊反序列化器来回答这个问题 - 自定义反序列化器不能是特定于字段的!因此,对于特定类型使用 LazyList 的自定义实现的任何解决方案都无法充分回答这个问题。

4

1 回答 1

1

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

@JsonDeserialize(contentAs=MyObject.class)
private List<MyObject> myObject = ListUtils.lazyList(new ArrayList(), {new MyObject()} as Factory);
于 2013-08-29T04:47:31.320 回答