2016-07-06 76 views
0

我的理解是,傑克遜的DefaultScalaModule應該是能看懂的Scala case類外的開箱。但它似乎窒息,只要我給它超過一個領域:解析Scala的case類與傑克遜

val mapper = new ObjectMapper().registerModule(DefaultScalaModule) 
scala> mapper.readValue("""{"foo": "bar", "bar": "foo"}""", classOf[Map[String, String]]) 
res98: Map[String,String] = Map(foo -> bar, bar -> foo) 

class Foo(foo: String) 
scala> mapper.readValue("""{"foo": "bar"}""", classOf[Foo]) 
res101: Foo = Foo(bar) 

class Foo(foo: String, bar: String) 
scala> mapper.readValue("""{"foo": "bar", "bar": "foo"}""", classOf[Foo]) 
com.fasterxml.jackson.databind.JsonMappingException: Could not find creator property with name 'foo' (in class Foo) 
at [Source: {"foo": "bar", "bar": "foo"}; line: 1, column: 1] 

任何想法這是怎麼回事?

+0

奇怪。像你寫的那樣爲我工作(將Foo類聲明爲** case類**)。您正在使用哪些版本的庫? – Mikesname

+0

@Mikesname是的,當我嘗試它的時候,它實際上是一個'case class',不知何故,當我把它粘貼到問題中時,它失去了'case'。我正在使用傑克遜2.5.4 – Dima

回答

0

好吧,我一直在使用傑克遜2.5.4。看起來像升級到2.6.6修復它。

我試着首先升級到2.7.3,它也修復了這個問題,但似乎打破了別的東西(不知道究竟是什麼,我的一些測試失敗了,但我還沒有弄清楚確切的原因,並且只是放棄它,因爲2.6.6似乎做我需要的)。