首页 > 解决方案 > Akka Http - 将 DateTime 解析为 json 时出现“类型不匹配”

问题描述

我创建了应该将模型转换为 json 的简单特征:

trait Protocols extends SprayJsonSupport with DefaultJsonProtocol {
  implicit val travelFormat = jsonFormat4(Travel)
}

我有一个Travel看起来像的模型:

case class Travel(id: Option[Long] = None,
                  startDate: DateTime,
                  endDate: DateTime,
                  name: String,
                  description: String,
                  amount: BigDecimal)

但问题是(我发现)在DateTime课堂上。在这段代码中,我在方法上遇到编译器错误jsonFormat4

Type mismatch, expected: (NotInferedP1, NotInferedP2, NotInferedP3, NotInferedP4) => NotInferedT, actual: (Option[Long], DateTime, DateTime, String, String, BigDecimal) => Travel

当我删除所有DateTime字段时,它运行良好。但就我而言,我需要这些字段。那我该怎么修呢?我尝试给他们一个默认参数,但它也不起作用。

标签: scalaakkaakka-httpspray

解决方案


您可以尝试编写这样的自定义格式化程序,例如:

 implicit val travelFormat: Format[Travel] =
    new Format[Travel] {
       for {
          id <- (json \ "id").validate[Int]
          startDate <- (json \ "startDate").validate[FiniteDuration]
          endDate <- (json \ "endDate").validate[FiniteDuration]
          ....
        } yield {
          Travel(
            id = id,
            startDate = startDate,
            endDate = endDate,
            ....
          )
        }
    }

我在上面的例子中使用了 play-json 库!


推荐阅读