我有一个对象使用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的自定义实现的解决方案将充分回答这个问题。
答案 0 :(得分:1)
以下解决方案适用于List和Map集合对象,它也可能适用于您的。
@JsonDeserialize(contentAs=MyObject.class)
private List<MyObject> myObject = ListUtils.lazyList(new ArrayList(), {new MyObject()} as Factory);