下面是一个示例,展示了如何为具有列表属性的 case class 创建隐式 JSON 格式化。
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport
import spray.json._
// 定义包含列表属性的 case class
case class Person(name: String, age: Int, hobbies: List[String])
// 创建一个 trait,扩展 SprayJsonSupport,并定义隐式的 JSON 格式化器
trait JsonSupport extends SprayJsonSupport with DefaultJsonProtocol {
implicit val personFormat: RootJsonFormat[Person] = jsonFormat3(Person)
}
// 在你的路由中混入 JsonSupport trait
class MyRoutes extends JsonSupport {
// 在这里使用 personFormat
// 定义路由
val route = path("person") {
get {
// 创建一个 Person 对象
val person = Person("John Doe", 30, List("reading", "running"))
// 将 Person 对象转换为 JSON 并返回
complete(person.toJson)
}
}
}
在上面的示例中,我们首先定义了一个带有列表属性的 case class Person
。然后,我们创建了一个名为 JsonSupport
的 trait,它扩展了 SprayJsonSupport
并定义了隐式的 JSON 格式化器 personFormat
。最后,在我们的路由中混入了 JsonSupport
trait,并使用 personFormat
将 Person
对象转换为 JSON。在 GET 请求中,我们创建了一个 Person
对象并将其转换为 JSON 并返回。
请注意,上述代码使用了 Spray JSON 库,因此需要在项目中添加相应的依赖。