Маленький пример модуля Jackson Scala?
Может ли кто-нибудь указать мне на простой пример сериализации/десериализации Джексона с их модулем Scala для 2.10? Я ищу JSON на основе отражения, не требуя аннотации или назначения по каждому полю, и казалось, что это может сделать это, но в их документации нет примеров.
Если у меня есть класс case:
case class Person(name:String, age:Int)
val person = Person("Fred", 65)
Итак, из их github readme:
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
Хорошо, теперь что...? Как преобразовать p в/из JSON?
Ответы
Ответ 1
Сделайте снимок:
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)
ИЗМЕНИТЬ
Просто не забудьте объявить класс Person
как верхний уровень, так как он не будет работать иначе.
Ответ 2
Вот полный пример:
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)
}
}
Однако это не удается для mapper.readValue.
Здесь моя конфигурация:
<!-- 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>
Любые идеи, почему это не удается? Я не вижу разницы с рабочим примером.