我正在使用喷雾编写 REST api,并且在 json 编组方面遇到了一些困难。我的服务返回cats.data.Xor[Failure, Success]。如何从 REST 端点返回此数据类型?如何为此编写响应编组器?
问问题
64 次
1 回答
0
最简单的解决方案就是调用toEither
路由器中的值,让 Spray 提供的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)
}
}
这使您可以避免转换的运行时成本(可能可以忽略不计)和语法成本(可以忽略不计)。
请注意,Cats 将在即将发布Xor
的版本中移除以支持标准库,因此现在仅使用可能是最实用的解决方案。Either
toEither
于 2016-09-22T15:15:02.287 回答