我正在尝试使用http 4s的Blaze客户端进行http调用。当返回200响应时,它工作正常,但在HTTP 500或400的情况下,我无法弄清楚如何检索从服务器返回的详细错误消息。
我只能在此客户端的日志中看到以下内容。
2022-11-10 23:37:40信息-正在关闭连接池:curAllocated=1个空闲队列。size=1个等待队列。size=0最大等待队列限制=256已关闭=false org.http4s.client.UnexpectedStatus:意外HTTP状态:500内部服务器错误
def callEffect(client: Client[IO]): IO[String] = {
val uri = serverUrl
.withPath("/abc")
val request = GET(uri, Accept(MediaType.application.json))
client.expect[String](request).map { res =>
println(res)
res
}
}
def deploy(implicit cs: ContextShift[IO]): IO[ExitCode] = {
BlazeClientBuilder[IO](scala.concurrent.ExecutionContext.global).resource
.map(x => println(callEffect(x).unsafeRunSync()))
.use(_ => IO.unit.as(ExitCode.Success))
}
1条答案
按热度按时间5ssjco0h1#
由于结果是在
IO
中提供的,因此可以使用IO
的任何错误处理功能来处理问题,例如使用redeem
这里有一篇关于这个主题的很棒的文章:https://softwaremill.com/practical-guide-to-error-handling-in-scala-cats-and-cats-effect/
为了获得更多的控制,您可以从客户端本身处理错误,例如使用
expectOr()
而不是expect()
,这样您就可以访问一个方便的onError: Response[F] => F[Throwable]
。