将 json 解析为 scala case class 时出错

Error while Parsing json into scala case class

在我的 spring(mvc) 网络应用程序中,我在我的 Scala 代码中使用 org.codehaus.jackson.map.ObjectMapper 将我的 json 映射到使用大小写 类 的 Scala 对象。我的 Json 字符串是 json 个对象的数组。所以我正在使用:

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

我用对了还是有别的方法?

问题是 Java 类型擦除。 classOf[List[MyClass]] 在运行时与 classOf[List[_]] 相同。这就是为什么杰克逊不知道要创建哪些类型的元素。

幸运的是,Jackson 确实支持使用 JavaType 进行解析,它描述了类型本身。

这里是 Java 中的一个简单示例:

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