JSON4S не сериализует внутренние члены класса дел

У меня есть case-класс, унаследованный от черты:

trait Thing {
  val name: String
  val created: DateTime = DateTime.now
}

case class Door(override val name: String) extends Thing

Это akka-http, и я пытаюсь вернуть JSON в запрос get:

...
~
    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, она сериализуется, но она определяет цель, так как мне не нужно (или не нужно) предоставлять временную метку пользователю. Я попытался переместить метку времени в Door (либо как переопределение, либо просто пропустив черту), и результат остался прежним (то есть, "не создано").

как мне сказать JSON4S сериализовать внутренние (и унаследованные) внутренние элементы?

1 ответ

Решение

Вы должны определить пользовательский формат.

import org.json4s.{FieldSerializer, DefaultFormats}
import org.json4s.native.Serialization.write

case class Door(override val name: String) extends Thing
trait Thing {
  val name: String
  val created: DateTime = DateTime.now
}

implicit val formats = DefaultFormats + FieldSerializer[Door with Thing()]

val obj = new Door("dooor")
write(obj) 
Другие вопросы по тегам