スプレー/ 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 関数に取得/作成するためのこの状況での最良のオプションは何ですか?