1

スプレー/ akka httpでは、次のようにケースクラスをマーシャリング/アンマーシャリングできます:

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

ただし、これは aLatitude(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