我正在尝试解析包含列表的json对象。如果该字段由Java List支持,我能够解析该列表,但如果该字段由Scala列表支持,则它将失败。解析为Scala列表与Java列表之间有什么区别,我需要更改哪些内容才能将其解析为Scala列表?
object JsonParsingExample extends App {
val objectMapper = new ObjectMapper()
// This line succeeds.
objectMapper.readValue("""{"list": ["a","b"]}""", classOf[JavaList])
// This line fails.
objectMapper.readValue("""{"list": ["a","b"]}""", classOf[ScalaList])
}
case class JavaList() {
@JsonProperty(value = "list")
var myList: java.util.ArrayList[String] = null
}
case class ScalaList() {
@JsonProperty(value = "list")
var myList: List[String] = null
}
我收到的错误消息是:
com.fasterxml.jackson.databind.JsonMappingException:无法构造scala.collection.immutable.List的实例,问题:抽象类型需要映射到具体类型,具有自定义反序列化器,或者使用其他类型信息进行实例化
答案 0 :(得分:1)
默认情况下,杰克逊对Scala类型一无所知(否则它必须依赖于scala-library
)。要教它,请使用jackson-module-scala。
答案 1 :(得分:1)
因为scala.collection.immutable.List实际上是一个抽象类。通常,当您使用List(" a"," b"," c")时,对象List.apply()来自此行:{{ 3}}并且它实际上是一个内部类(称为scala.collection.immutable。$ colon $ colon)。