1
我正在寫REST api使用噴霧,並與json編組有一些困難。我的服務返回cats.data.Xor [失敗,成功]。我如何從REST端點返回這種數據類型?如何爲此編寫響應編組器?噴霧編組cats.data.Xor
我正在寫REST api使用噴霧,並與json編組有一些困難。我的服務返回cats.data.Xor [失敗,成功]。我如何從REST端點返回這種數據類型?如何爲此編寫響應編組器?噴霧編組cats.data.Xor
最簡單的解決方案就是對您的路由器的值調用toEither
,該值允許Spray提供的編組器接管。
另一個解決方案是提供自己的編組(我已經這樣做了一個自己幾次):
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
是最實際的解決方案。