Глядя на источник, пользовательский сериализатор для Instant
будет анализировать только Int
значения, а не String
значения:
case object JInstantSerializer extends CustomSerializer[Instant]( format => (
{
case JInt(d) => Instant.ofEpochMilli(d.toLong)
case JNull => null
},
{
case d: Instant => JInt(d.toEpochMilli)
}
))
Вы можете добавить правило для анализа String
в Instant
для устранения проблемы.
case object MyInstantSerialzer extends CustomSerializer[Instant]( format => (
{
case JInt(d) => Instant.ofEpochMilli(d.toLong)
case JString(s) => Instant.parse(s)
case JNull => null
},
{
case d: Instant => JInt(d.toEpochMilli)
}
))
implicit lazy val formats = DefaultFormats + MyInstantSerialzer
Лично я считаю, что это не работает, потому что он не сохраняет точность Instant
при чтении / записи в JSON
.Это выглядит лучше:
case object MyInstantSerialzer extends CustomSerializer[Instant]( format => (
{
case JString(s) => Instant.parse(s)
case JNull => null
},
{
case s: Instant => JString(s.toString)
}
))
Существует также более сложное решение в ответе на этот вопрос