1

在 spray / akka http 我可以编组/解组这样的案例类:

case class Latitude(value:Double)
object Latitude extends DefaultJsonProtocol with SprayJsonSupport {
  implicit val LatitudeFormat = jsonFormat1(Latitude.apply)
}

但是,这会将 a 编组Latitude(42)到 object {value:42}。我宁愿希望它被编组为一个 JsNumber 42。为此,我执行了以下操作:

case class Latitude(value:Double)
object Latitude extends DefaultJsonProtocol with SprayJsonSupport {
  implicit object LatitudeFormat extends RootJsonFormat[Latitude] {
    def write(lat: Latitude) = lat.value.toJson
    def read(value: JsValue) = ??? //too much code with decent error handling, but working
  }
}

但是,我不想为每个“简单值案例类”都这样做。我的目标是创建一个函数(或者可能是一个宏),它的工作原理与喷雾的完全一样,jsonFormat1除了它不写入/读取对象而是简单的值,具体取决于我使用它的案例类。

不幸的是,似乎没有任何方法可以扩展或组合从 jsonFormat1 函数返回的 jsonRootFormat 对象。该函数本身似乎使用了已弃用的东西(例如ClassManifest),所以我不确定是否要根据需要复制和调整它。在这种情况下,为 JsValue 函数获取/创建这样一个简单的案例类的最佳选择是什么?

4

0 回答 0