Quelqu'un peut-il me diriger vers un exemple simple de sérialisation/désérialisation de Jackson avec leur module Scala pour 2.10? Je recherche un JSON basé sur la réflexion ne nécessitant pas d'annotation ou d'affectation champ par champ et il semblait que cela pourrait le faire, mais leur documentation ne contient aucun exemple.
Si j'ai une classe de cas:
case class Person(name:String, age:Int)
val person = Person("Fred", 65)
Donc, à partir de leur readme github:
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
OK, maintenant quoi ...? Comment convertir p vers/depuis JSON?
Essayez ceci:
val person = Person("fred", 25)
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
val out = new StringWriter
mapper.writeValue(out, person)
val json = out.toString()
println(json)
val person2 = mapper.readValue(json, classOf[Person])
println(person2)
MODIFIER
Assurez-vous simplement de déclarer la classe Person
comme niveau supérieur car cela ne fonctionnera pas autrement.
Voici un exemple complet:
package com.example.samples
import org.junit.Test
import com.fasterxml.jackson.databind.ObjectMapper
import org.springframework.context.annotation.Bean
import Java.io.File
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import Java.io.StringWriter
class JacksonTest {
@Test
@throws[Exception] def jacksonTest(): Unit = {
//case class Person(var name: String = "", var age: Int = 0)
//case class Person(@Bean var name: String, @Bean var age: Int)
case class Person( name: String, age: Int )
val person = Person("fred", 25)
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
val out = new StringWriter
mapper.writeValue(out, person)
val json = out.toString()
println(json)
val person2 = mapper.readValue(json, classOf[Person])
println(person2)
}
}
Cependant, cela échoue sur mapper.readValue.
Voici ma config:
<!-- Jackson libraries for JSON marshalling and unmarshalling -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.3</version>
</dependency>
<!-- Jackson module for scala object marshalling and unmarshalling -->
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-scala_2.10</artifactId>
<version>2.2.2</version>
</dependency>
<!-- Scala Compiler -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-compiler</artifactId>
<version>2.10.2</version>
</dependency>
Des idées pourquoi cela échoue? Je ne vois pas de différence avec l'exemple de travail.