【问题标题】:Akka Http - "Type mismatch" while parsing DateTime into jsonAkka Http - 将 DateTime 解析为 json 时出现“类型不匹配”
【发布时间】:2019-05-23 05:06:06
【问题描述】:

我创建了应该将模型转换为 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 字段时,它运行良好。但就我而言,我需要这些字段。那我该怎么修呢?我试过给他们一个默认参数,但也没有用。

【问题讨论】:

标签: scala akka akka-http spray


【解决方案1】:

您能否尝试编写一个像这样的自定义格式化程序:

 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 库!

【讨论】:

  • 这是一个选项。但是 Akka 有任何用户友好的自动格式化程序吗?我真的需要编写自己的格式化程序来解析日期吗?
  • 我尝试使用您的代码,但出现编译器错误:Too many arguments for method parameters(ToResponseMarshallable)
猜你喜欢
  • 2021-05-13
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 2014-01-08
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
相关资源
最近更新 更多