web-dev-qa-db-fra.com

Petit exemple de Jackson Scala Module?

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?

29
Greg

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.

37
cmbaxter

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.

8
user48956