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}]}