FasterXML / FasterXML/jackson-module-scala

[Scala Worksheet] JsonMappingException Argument of constructor has no property name annotation

Aperta
#198 6 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Scala
Stelle
506
Fork
138
Merge medio
3h 6m
PR unite (30g)
48

Descrizione

One from JsonMappingException family, but most probably it is not duplicate of them, since no release fixes it.
Environment: `Scala 10.4`, `JIdea 13.1.3` with `JVM 1.7` SDK for Scala, tested with jackson module scala versions `2.2.2`,`2.3.2`, `2.4.5`, `2.5.2` with identical behaviour. The code works if run as regular Scala.

``` scala
import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper}
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper;

val mapper = new ObjectMapper() with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)

case class Person(name: String, age: Int)
case class Group(name: String, persons: Seq[Person], leader: Person)

val groupJson: String = """{"name":"Scala ppl","persons":[{"name":"Jeroen","age":26},{"name":"Martin","age":54}],"leader":{"name":"Martin","age":54}}"""

val nieco: Group = mapper.readValue[Group](groupJson)
println(Group)
```

Worksheet results

```
import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper}
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper

mapper: com.fasterxml.jackson.databind.ObjectMapper with com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper = $anon$1@44d0b8cf
res0: com.fasterxml.jackson.databind.ObjectMapper = $anon$1@44d0b8cf
res1: com.fasterxml.jackson.databind.ObjectMapper = $anon$1@44d0b8cf

defined class Person
defined class Group

groupJson: String = {"name":"Scala ppl","persons":[{"name":"Jeroen","age":26},{"name":"Martin","age":54}],"leader":{"name":"Martin","age":54}}

com.fasterxml.jackson.databind.JsonMappingException: Argument #0 of constructor [constructor for A$A0$A$A0$Group, annotations: [null]] has no property name annotation; must have name when multiple-parameter constructor annotated as Creator
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2([nw] json-unmarshall-group.sc3788296715618745837.tmp:262)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer([nw] json-unmarshall-group.sc3788296715618745837.tmp:237)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer([nw] json-unmarshall-group.sc3788296715618745837.tmp:138)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer([nw] json-unmarshall-group.sc3788296715618745837.tmp:390)
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer([nw] json-unmarshall-group.sc3788296715618745837.tmp:3165)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose([nw] json-unmarshall-group.sc3788296715618745837.tmp:3058)
at com.fasterxml.jackson.databind.ObjectMapper.readValue([nw] json-unmarshall-group.sc3788296715618745837.tmp:2171)
at com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper$class.readValue([nw] json-unmarshall-group.sc3788296715618745837.tmp:176)
at #worksheet#.$anon$1.readValue([nw] json-unmarshall-group.sc3788296715618745837.tmp:3)
at #worksheet#.nieco$lzycompute([nw] json-unmarshall-group.sc3788296715618745837.tmp:12)
at #worksheet#.nieco([nw] json-unmarshall-group.sc3788296715618745837.tmp:12)
at #worksheet#.#worksheet#([nw] json-unmarshall-group.sc3788296715618745837.tmp:12)
Caused by: java.lang.IllegalArgumentException: Argument #0 of constructor [constructor for A$A0$A$A0$Group, annotations: [null]] has no property name annotation; must have name when multiple-parameter constructor annotated as Creator
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findValueInstantiator(BasicDeserializerFactory.java:286)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:266)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:168)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:399)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:348)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:261)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:241)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:394)
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3169)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3062)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2175)
at com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper$class.readValue(ScalaObjectMapper.scala:180)
at A$A0$A$A0$$anon$1.readValue([nw] json-unmarshall-group.sc3788296715618745837.tmp:7)
at A$A0$A$A0.nieco$lzycompute([nw] json-unmarshall-group.sc3788296715618745837.tmp:16)
at A$A0$A$A0.nieco([nw] json-unmarshall-group.sc3788296715618745837.tmp:16)
at A$A0$A$A0.get$$instance$$nieco([nw] json-unmarshall-group.sc3788296715618745837.tmp:16)
at A$A0$.main([nw] json-unmarshall-group.sc3788296715618745837.tmp:44)
at A$A0.main([nw] json-unmarshall-group.sc3788296715618745837.tmp)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
Output exceeds cutoff limit.
```

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.