gpt4 book ai didi

scala - 使用 SprayJson 编码 java.util.Date

转载 作者:行者123 更新时间:2023-12-05 05:22:04 24 4
gpt4 key购买 nike

我是 Scala 和 Akka 的新手。

我有以下案例类:

case class Demo(userId: String, date: java.util.Date, message: String) extends     BusinessModel

我必须以 Json 格式发送 List[Demo] 作为对获取请求的响应,但由于日期原因,我在以下代码中遇到问题:

隐式验证 demoFormat:RootJsonFormat[Demo] = jsonFormat3(Demo)

如果你能帮助我,我将不胜感激

最佳答案

您需要为 java.util.Date 提供一种格式,因为默认情况下 spray 没有格式。

快速谷歌搜索导致https://gist.github.com/owainlewis/ba6e6ed3eb64fd5d83e7 :

import java.text._
import java.util._
import scala.util.Try
import spray.json._

object DateMarshalling {
implicit object DateFormat extends JsonFormat[Date] {
def write(date: Date) = JsString(dateToIsoString(date))
def read(json: JsValue) = json match {
case JsString(rawDate) =>
parseIsoDateString(rawDate)
.fold(deserializationError(s"Expected ISO Date format, got $rawDate"))(identity)
case error => deserializationError(s"Expected JsString, got $error")
}
}

private val localIsoDateFormatter = new ThreadLocal[SimpleDateFormat] {
override def initialValue() = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX")
}

private def dateToIsoString(date: Date) =
localIsoDateFormatter.get().format(date)

private def parseIsoDateString(date: String): Option[Date] =
Try{ localIsoDateFormatter.get().parse(date) }.toOption
}

在您编写的代码段中导入 DateMarshalling._ implicit val demoFormat: RootJsonFormat[Demo] = jsonFormat3(Demo) 现在应该可以了:)

关于scala - 使用 SprayJson 编码 java.util.Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41508948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com