2015-06-16 27 views
0

在我的spring(mvc)web應用程序中,我在我的scala代碼中使用org.codehaus.jackson.map.ObjectMapper將我的json映射爲使用case類的scala對象。我的Json字符串是一個json對象數組。所以我用:將json解析爲scala case類時出錯

val user = mapper.readValue(myJson, classOf[List[MyClass]]) 

此行拋出一個錯誤:

Exception in thread "main" org.codehaus.jackson.map.JsonMappingException: Can not construct instance of scala.collection.immutable.List, problem: abstract types can only be instantiated with additional type inform

我使用它的權利或有任何其他方式?

回答

2

問題是Java類型的擦除。運行時的classOf[List[MyClass]]classOf[List[_]]相同。這就是爲什麼傑克遜無法知道,要創建哪些類型的元素。

幸運的是,Jackson不支持用JavaType來解析,它描述了它們自己的類型。

這裏一個簡單的示例中的Java:

JavaType type = mapper.getTypeFactory().constructCollectionType(List.class, MyClass.class); 
mapper.readValue(myJson, type);