2016-06-14 65 views
0

我正試圖解析包含列表的json對象。如果該字段由Java List支持,我能夠解析列表,但如果該字段由Scala列表支持,則它將失敗。解析爲Scala列表與Java列表之間有什麼區別,以及我需要更改哪些內容才能將其解析爲Scala列表?爲什麼我將json解析爲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,問題的實例:抽象類型要麼需要映射到具體類型,具有自定義解串器,或用附加的類型信息

+2

嘗試在開頭添加這個:'objectMapper.registerModule(DefaultScalaModule)' – Dima

回答

1

傑克遜被實例化並不知道在默認情況下約斯卡拉類型的任何東西(否則就必須依靠scala-library)。教它,使用jackson-module-scala