我创建了错误的层次结构:
sealed trait MyError extends Throwable
final case class SecondError(msg: String) extends MyError现在,我可以在我的http4s路由中得到这样的错误:
case GET -> Root / "things" => for {
response <- things.all.foldM(
error => error match {
case SecondError(_) => InternalServerError(error)
}
...但是我得到了编译错误:
could not find implicit value for parameter encoder: io.circe.Encoder[Throwable]
Throwable可以用circe和http4s编码吗?我试过这样做:
implicit def encoderHttpThrowable: EntityEncoder[Env, Throwable] = jsonEncoderOf[Env, Throwable]但它并没有解决任何问题。
发布于 2020-01-16 18:58:24
用Circe (或任何其他库)自动编码Java层次结构是不可能的(我非常肯定这一点)。
所以你有三种可能性:
case GET -> Root / "things“=> things.all.foldM ( error => InternalServerError(error.getMessage()),Ok(_) )
密封特性MyError最后一个案例类SecondError(msg: String)扩展了MyError
现在,您可以对错误进行编码。
..。case GET -> Root / "things“=> things.all.foldM ( error => InternalServerError( Error ),Ok(_) )
..。case GET ->根/ "things“=> things.all .mapError{ case ex: IllegalArgumentException => SecondError(ex.getMessage) case ex => FirstError(ex.getMessage) } .foldM ( error => InternalServerError(error),Ok(_) )
https://stackoverflow.com/questions/59771866
复制相似问题