[英]JSON4S does not serialize internal case class members
我有一个从特征继承的案例类:
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)
}
}
} ~
...
但我只得到name的JSON。 我的确有隐式的Joda序列化程序。 如果我在case类的构造函数中覆盖了“创建的”时间戳,它的确会序列化,但是它定义了目的,因为我不需要(或不想)用户提供时间戳。 我尝试将时间戳移到Door中(作为替代或只是跳过特征),结果是相同的(即没有“创建”)。
我如何告诉JSON4S也序列化内部成员(和继承的成员)?
您必须定义一个自定义格式。
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.