2014-06-19 84 views
0

我想用Jackson解析對象列表。隨着GSON,我可以很容易地做到這一點:用Jackson解析對象列表

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

我在此期間找到了解決方案。顯然,傑克遜提供了自己的解決方法:

List<MyType> list = new ObjectMapper().readValue(input, CollectionType.construct(List.class, SimpleType.construct(MyType.class)); 
0

更容易

MyType myType = new ObjectMapper().readValue(input, new TypeReference<List<MyType>>() {}); 

更新的答案。

+0

不,輸入包含* MyType的*列表,而不是單個對象。 – Jorn

+0

這也行不通,請參閱我的編輯 – Jorn