【发布时间】:2015-06-16 02:19:48
【问题描述】:
我有以下配置:
sealed trait Status
case object Edited extends Status
case object NotEdited extends Status
case class Tweet(content:String, status:Status)
我想使用 Play Json 格式,所以我想我必须有这样的东西(我不想在伴生对象中这样做):
trait JsonImpl{
implicit val TweetFormat = Json.format[Tweet]
implicit val statusFormat = Json.format[Status]
implicit val StatusFormat = Json.format[Edited.type]
implicit val NotEditedFormat = Json.format[NotEdited.type]
}
但是编译器抱怨说:
No implicit format for Tweet available.
它还说我不能使用Edited.type,因为它需要应用和取消应用功能。我该怎么办?
编辑1:
我能想到这样的事情:
implicit object StatusFormat extends Format[Status] {
def reads(json: JsValue) =
(json \ "type").get.as[String] match {
case "" => Edited
case _ => UnEdited
}
def writes(stat: Status) = JsObject(Seq(
stat match {
case Edited => "type" -> JsString("Edited")
case NotEdited => "type" -> JsString("UnEdited")
}
))
}
但是read 部分有问题,编译器抱怨它需要JsonResult 而不是Edited.type
【问题讨论】:
标签: json scala playframework scala-macros