我想用Jackson解析一个对象列表。有了Gson,我可以轻松地做到这一点:
List<MyType> list = new Gson().fromJson(input, Types.listOf(MyType.class));
对杰克逊来说,似乎更难:
List<MyType> list = new ObjectMapper().readValue(input, /* What to put here? */);
代码需要适用于任何类型的列表(如Gson那样),因此我不能只创建一个包含MyType
列表的类型并将其传入。
我尝试使用new TypeLiteral<List<MyType>>(){}
,但它只适用于单一类型。如果我将类型传递给方法,它就不再起作用了:
public <T> List<T> parse(Class<T> myType) {
// returns a List<Map<?,?>> instead of List<T>
return new ObjectMapper().readValue(input, new TypeLiteral<List<T>>(){});
}
我如何与杰克逊一起做这件事?
答案 0 :(得分:0)
更容易
MyType myType = new ObjectMapper().readValue(input, new TypeReference<List<MyType>>() {});
更新了答案。
答案 1 :(得分:0)
我在同一时间找到了解决方案。显然,杰克逊提供了自己的解决方法:
List<MyType> list = new ObjectMapper().readValue(input, CollectionType.construct(List.class, SimpleType.construct(MyType.class));