Scala 使用JSON编组java.util.Date

Scala 使用JSON编组java.util.Date,scala,marshalling,Scala,Marshalling,我是斯卡拉和阿克卡的新手 我有以下案例课程: case class Demo(userId: String, date: java.util.Date, message: String) extends BusinessModel 我必须发送Json格式的List[Demo]作为对get请求的响应,但由于日期原因,我在以下代码中遇到了问题: 隐式val demoFormat:RootJsonFormat[Demo]=jsonFormat3(Demo) 如果您能帮助我,我将不胜感激您需要

我是斯卡拉和阿克卡的新手

我有以下案例课程:

case class Demo(userId: String, date: java.util.Date, message: String) extends     BusinessModel
我必须发送Json格式的List[Demo]作为对get请求的响应,但由于日期原因,我在以下代码中遇到了问题:

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


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

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

快速的谷歌搜索将导致:


导入DateMarshalling。\在您编写的片段代码中,
隐式val demoFormat:RootJsonFormat[Demo]=jsonFormat3(Demo)
,现在应该可以了:)

如果可能,避免使用java.util.Date,而使用java.time中的新类。*^试着告诉Mongo。
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.SSSZ")
  }

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

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