JSON4S不会序列化内部案例类成员

时间:2016-12-28 19:57:33

标签: scala akka-http json4s

我有一个继承自特征的案例类:

trait Thing {
  val name: String
  val created: DateTime = DateTime.now
}

case class Door(override val name: String) extends Thing

这是akka-http,我试图将JSON返回给get请求:

...
~
    path ("get" / Segment) { id =>
      get {

        onComplete(doorsManager ? ThingsManager.Get(id)) {
          case Success(d: Door) => {
            complete(200, d)
          }
          case Success(_) => {
            complete(404, s"door $id not found")
          }
          case Failure(reason) => complete(500, reason)
        }
      }
    } ~
...

但我只获得名称的JSON。我确实在范围内有隐式的Joda序列化器。 如果我覆盖'创建的'案例类的构造函数中的时间戳,它确实被序列化,但它定义了目的,因为我不需要(或希望)用户提供时间戳。我已经尝试将时间戳移动到门中(作为覆盖或仅仅通过跳过特征)并且结果是相同的(即,没有'创建')。

我如何告诉JSON4S序列化内部成员(以及继承的成员)?

1 个答案:

答案 0 :(得分:3)

您必须定义自定义格式。

import org.json4s.{FieldSerializer, DefaultFormats}
import org.json4s.native.Serialization.write

case class Door(override val name: String) extends Thing
trait Thing {
  val name: String
  val created: DateTime = DateTime.now
}

implicit val formats = DefaultFormats + FieldSerializer[Door with Thing()]

val obj = new Door("dooor")
write(obj)