我已经创建了简单的特征,可以将模型转换为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
字段时,效果很好。但就我而言,我需要此字段。那么我应该如何解决呢?我尝试给他们提供默认参数,但是它也没有用。
答案 0 :(得分: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库!