我正在尝试使用Scala代码阅读以下json结构,但无法将其作为case类对象读取。
"a": {
"source": [
{
"name": "test",
"basePath": "/Users/bounce/anuj/data/test",
"granularity": "None"
},
{
"name": "test1",
"basePath": "/Users/bounce/anuj/data/test1",
"granularity": "None"
}
]
}
}
下面是我正在使用的代码:
val mapper = new ObjectMapper().registerModule(DefaultScalaModule)
val mapData = mapper.readValue(source, classOf[Map[String,FactConfig]])
@JsonInclude(Include.NON_EMPTY)
case class Source(name: String,
basePath: String,
granularity: String)
case class FactConfig(
source : List[Source])
val d = mapData.get("a").asInstanceOf[FactConfig]
当我尝试将其转换为FactConfig对象时,我遇到了异常
Exception in thread "main" java.lang.ClassCastException: scala.collection.immutable.Map$Map1 cannot be cast to com.bounce.dp.etl.config.FactConfig
请向我建议我在做什么错。
答案 0 :(得分:0)
在Java和Scala世界中,我们通常在编译过程中丢失通用类型信息。通过使用classOf
操作员,杰克逊不知道它应该如何使用映射键和值。解决方法是使用com.fasterxml.jackson.core.type.TypeReference
,即
val mapData = mapper.readValue(source, new TypeReference[Map[String, FactConfig]] {})