Jackson注册自定义反序列化器以从JSON对象映射到集合

时间:2016-08-26 18:19:19

标签: java json jackson

我有一些像这样的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数组包装在外部对象中以解决这个问题。

0 个答案:

没有答案