Small Example of Jackson Scala Module? Small Example of Jackson Scala Module? json json

Small Example of Jackson Scala Module?


Give this a shot:

val person = Person("fred", 25)val mapper = new ObjectMapper()mapper.registerModule(DefaultScalaModule)    val out = new StringWritermapper.writeValue(out, person)val json = out.toString()println(json)val person2 = mapper.readValue(json, classOf[Person])println(person2)

EDIT

Just be sure to declare the Person class as top level as it will not work otherwise.


Here's a complete example:

package com.example.samplesimport org.junit.Testimport com.fasterxml.jackson.databind.ObjectMapperimport org.springframework.context.annotation.Beanimport java.io.Fileimport com.fasterxml.jackson.module.scala.DefaultScalaModuleimport java.io.StringWriterclass 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)  }}

However, this fails at mapper.readValue.

Here's my 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>

Any ideas why this fails? I can't see a difference with the working example.


I have created a generic function to convert JSON String to Case Class/Object and Case Class/Object to JSON String.

SBT Dependencies required in build.sbt file:

name := "jackson-example"scalaVersion := "2.12.11"libraryDependencies += "com.fasterxml.jackson.module" %% "jackson-module-scala" % "2.10.1"libraryDependencies += "com.fasterxml.jackson.core" % "jackson-databind" % "2.10.1"

JSON String to Case Class/Object

def fromJson[T](json: String)(implicit m: Manifest[T]): Option[T] = {    Try {      lazy val mapper = new ObjectMapper() with ScalaObjectMapper      mapper.registerModule(DefaultScalaModule)      mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)      mapper.readValue[T](json)    } match {      case Success(x) => Some(x)      case Failure(err) => {        logger.error("@@@@Got " + err.getMessage() + " while JSON to Object:--> " + json)        None      }    }  }

Case Class/Object to JSON String

def toJson[T](obj: T)(implicit m: Manifest[T]): Option[String] = {    Try {      lazy val mapper = new ObjectMapper() with ScalaObjectMapper      mapper.registerModule(DefaultScalaModule)      mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)      mapper.writeValueAsString(obj)    } match {      case Success(x) => Some(x)      case Failure (err) => {        logger.error("@@@@Got " + err.getMessage() + " while converting object  to JSON:--> " + obj)        None      }    }  }