Je suis nouveau sur scala et j'essaie de mapper mon json à un objet. J'ai trouvé jackson-scala-module mais je n'arrive pas à comprendre comment l'utiliser. Un petit exemple pourrait être utile.

val json = { "_id" : "jzcyluvhqilqrocq" , "DP-Name" : "Sumit Agarwal" , "DP-Age" : "15" , "DP-height" : "115" , "DP-weight" : "68"}

Je veux mapper ceci à Person(name: String, age: Int, height: Int, weight: Int)

Jusqu'à présent, j'ai essayé d'utiliser ceci:

import com.fasterxml.jackson.databind.ObjectMapper

Val mapper = = new ObjectMapper();    
val data = mapper.readValue(json, classOf[Person])

Dépendance que j'utilise:

"com.fasterxml.jackson.module" % "jackson-module-scala_2.11" % "2.8.4"

Est-ce que je manque quelque chose?

MODIFIER:

[error] (run-main-4) com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of models.Person: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, or perhaps need to add/enable type information?)
1
Sumit Agarwal 16 janv. 2017 à 14:45

2 réponses

Meilleure réponse

Pour que cela fonctionne, vous devez enregistrer DefaultScalaModule avec le mappeur d'objets:

val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)

En outre, vous devez mettre à jour votre classe de cas et fournir à Jackson le nom de la propriété à la liaison de nom de champ:

case class Person(@JsonProperty("DP-Name") name: String, 
                  @JsonProperty("DP-Age") age: Int, 
                  @JsonProperty("DP-height") height: Int, 
                  @JsonProperty("DP-weight") weight: Int)
7
Mykhailo Hodovaniuk 22 mars 2019 à 09:44
  • Le problème est que vous ne vous êtes pas enregistré DefaultScalaModule avec ObjectMapper.
lazy val mapper = new ObjectMapper() with ScalaObjectMapper
 mapper.registerModule(DefaultScalaModule)
  • Veuillez trouver une réponse fonctionnelle et détaillée que j'ai fournie en utilisant des génériques ici.
0
Keshav Lodhi 15 mai 2020 à 18:58