1
私はスプレーを使用してREST APIを作成しています.Jsonマーシャリングでいくつかの問題があります。私のサービスはcats.data.Xor [失敗、成功]を返します。このデータ型をRESTエンドポイントからどのように戻すことができますか?これに対してレスポンス・マーシャラーを書くには?スプレーマーシャリングcats.data.Xor
私はスプレーを使用してREST APIを作成しています.Jsonマーシャリングでいくつかの問題があります。私のサービスはcats.data.Xor [失敗、成功]を返します。このデータ型をRESTエンドポイントからどのように戻すことができますか?これに対してレスポンス・マーシャラーを書くには?スプレーマーシャリングcats.data.Xor
ルータの値をtoEither
と呼ぶのが最も簡単な解決策です。これにより、スプレー提供のEither
マーシャルが引き継ぐことができます。
別の解決策は、独自のマーシャラーを提供するだろう(私はこの数回自分自身やった):これは、実行時のコスト(おそらく無視できる)と構文コストの両方を避けることができます
import cats.data.Xor
import spray.httpx.marshalling.ToResponseMarshaller
implicit def xorMarshaller[A, B](implicit
ma: ToResponseMarshaller[A],
mb: ToResponseMarshaller[B]
): ToResponseMarshaller[Xor[A, B]] =
ToResponseMarshaller[Xor[A, B]] { (value, ctx) =>
value match {
case Xor.Left(a) => ma(a, ctx)
case Xor.Right(b) => mb(b, ctx)
}
}
(以下ごくわずかです)。猫は、標準ライブラリのEither
しかし今後のバージョンでは、これだけ今のtoEither
一緒に行くの賛成でXor
を削除して
注意は最も現実的な解決策になることがあります。