If you use Jackson Json library in Scala, remember to register the DefaultScalaModule so that ObjectMapper can convert List, Array to Json correctly. See below.
val objectMapper = new ObjectMapper()
objectMapper.registerModule(DefaultScalaModule)
Simple example:
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility
import com.fasterxml.jackson.annotation.{JsonProperty, PropertyAccessor}
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
object JsonExample {
case class Car(@JsonProperty("id") id: Long)
case class Person(@JsonProperty("name") name: String = null,
@JsonProperty("cars") cars: Seq[Car] = null)
def main(args:Array[String]):Unit = {
val car1 = Car(12345)
val car2 = Car(12346)
val carsOwned = List(car1, car2)
var person = Person(name="wei", cars=carsOwned)
val objectMapper = new ObjectMapper()
objectMapper.registerModule(DefaultScalaModule)
objectMapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE)
objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY)
println(s"person: ${objectMapper.writeValueAsString(person)}")
}
}
Output:
person: {“name”:”wei”,”cars”:[{“id”:12345},{“id”:12346}]}