Scala / Play / Joda - Нет Json Сериализатор найден для типа (String, org.joda.time.DateTime) - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь сериализовать (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]                                         ^

Спасибо.

1 Ответ

4 голосов
/ 06 апреля 2020

Вы должны определить Json Readers and Writers вне вашего метода, возможно, в каком-то объекте. Тогда импортируйте это. В противном случае ваши последствия невидимы. В этом случае в контроллере они должны быть импортированы, или вы можете определить их внутри тела

...