我有一些像这样的JSON:
{
"version": "1",
"date": "8/26/16"
"items": [
{ "row": ["1", "1", "2"]},
{ "row": ["1", "2", "4"]},
{ "row": ["1", "3", "3"]}
]
}
我有一个像这样的Java对象(示例简化):
public class Item {
String ownerId;
String itemIdentifier;
Integer amount:
}
使用Jackson想要将项目列表反序列化为Collection<Item>
,其中“行”列表中的第0项是ownerId,第1项是itemIdentifier,第2项是金额。 / p>
我有一个反序列化器,它可以获取整个JSON对象并将其映射到Collection<Item>
。有没有什么办法可以用对象映射器注册反序列化器,以便在我反序列化为Collection<Item>
时使用它?
通常我会创建一个SimpleModule,并使用addDeserializer,但它似乎不能用于反序列化到集合。有没有办法使用TypeReference注册反序列化器?
例如,我通常会注册一个自定义反序列化器,如:
CustomDeserializer deserializer = new CustomDeserializer();
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Collection.class, deserializer);
mapper.registerModule(module);
但是在这个演员阵容中,我希望反序列化为Collection<Item>
,与addDeserializer一样,我只能指定Collection。
此外,我没有直接使用对象映射器,所以这样的东西不是一个选项:
Collection<Item> items = mapper.readValues(someJson, new TypeReference<Collection<Item>>);
我无法直接使用mapper的原因因为我使用的是Spring的RestTemplate,它直接使用对象映射器来处理反序列化JSON请求。
最后一点是我不希望将items数组包装在外部对象中以解决这个问题。