【问题标题】:Scala / Play / Joda - No Json Serializer found for type (String, org.joda.time.DateTime)Scala / Play / Joda - 找不到类型的 Json 序列化程序(字符串,org.joda.time.DateTime)
【发布时间】:2020-07-18 12:36:18
【问题描述】:

我正在尝试序列化 (String, DateTime),但我遇到了错误。我知道有一个更新的play.libs.json.jodaReads / .jodaWrites,但我目前必须使用下面显示的方法。

如何正确定义 joda DateTime 的读/写/格式?

import play.api.concurrent.Execution.Implicits.defaultContext
import play.libs.json._
import org.joda.time.DateTime

存储库

def dateTimeCall(id: String): Future[(String, DateTime)] = {

    implicit val jodaDateReads = Reads.jodaDateReads("yyyyMMdd'T'HHmmss.SSS'Z'")
    implicit val jodaDateWrites = Writes.jodaDateWrites("yyyyMMdd'T'HHmmss.SSS'Z'")
    implicit val dateFormat: Format[DateTime] = Format(jodaDateReads, jodaDateWrites)
    implicit val dateTimeFormat: Format[(String, DateTime)] = Json.format[(String, DateTime)]

    val result: Future[(String, DateTime)] = getDateTime(id)
    result

}

控制器

def dateTimeController(/* -- ommitted --*/) {
    val id = "..."
    repository.getDateTime(id).map {
        result =>
            Ok(serialize(result))
    }
}

错误

No Json serializer found for type (String, org.joda.time.DateTime). Try to implement an implicit Writes or Format for this type.
[error]                             Ok(serialize(result))
[error]                                         ^

谢谢。

【问题讨论】:

  • 如果你不能迁移到Java时间(推荐),你可以从Java时间派生joda编解码器。

标签: json scala playframework jodatime


【解决方案1】:

您应该在您的方法之外定义 Json 读取器和写入器,可能在某个对象中。然后导入它。否则你的隐含是不可见的。在这种情况下,在 Controller 中,您应该将它们作为导入,或者您可以在正文中定义

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2015-09-17
    • 2015-12-20
    相关资源
    最近更新 更多