У меня есть случай класс, унаследованный от признака:JSON4S не сериализовать пользователь внутреннего регистра класса
trait Thing {
val name: String
val created: DateTime = DateTime.now
}
case class Door(override val name: String) extends Thing
Это Акка-клиент, и я пытаюсь вернуться JSON на запрос получит:
...
~
path ("get"/Segment) { id =>
get {
onComplete(doorsManager ? ThingsManager.Get(id)) {
case Success(d: Door) => {
complete(200, d)
}
case Success(_) => {
complete(404, s"door $id not found")
}
case Failure(reason) => complete(500, reason)
}
}
} ~
...
, но я получаю только имя JSON. У меня есть неявные седаризаторы Joda в области. Если я переопределяю «созданную» метку времени в конструкторе класса case, она становится сериализованной, но она определяет цель, так как мне не нужен (или нужен) пользователь для предоставления метки времени. Я попытался переместить временную метку в дверь (либо переопределить, либо просто пропустить признак), и результат будет таким же (то есть «не создан»).
Как сообщить JSON4S о сериализации внутренних элементов (и унаследованных) тоже?
Во-первых, спасибо, что ответили. Я предполагаю, что FieldSerializer [Door with Thing()] (не компилировался) был опечаткой для FieldSerializer [Door with Thing]() (который компилировался) Я применил ваше предложение как в самой двери, так и в сопутствующем объекте Door и в классе API. но дата не вернулась. –
Хорошо. это сработало. У меня был еще один скрытый внутри Thing, который был похож (не включая Дверь). После его удаления и размещения неявных форматов в сопутствующем объекте Door (и добавлении ++ JodaTimeSerializers.all), похоже, он также содержит метку времени –