Scala:如何在Scala STTP上进行错误处理

jv4diomz  于 2023-02-12  发布在  Scala
关注(0)|答案(1)|浏览(171)

我使用的是Scala STTP
我调用了一个api,其构造如下:

val request = basicRequest
 .get(uri"$fullUri")
 .headers(headers)
 .response(asJson[MyClass])

是否可以使用类似的方法将返回的错误强制转换为不同的case类(例如:asJson方法)
因此,基本上我想在此处添加响应主体结果中的潜在强制转换:

case Success(result) =>
  if (result.code != StatusCode.Ok) {
    # try to cast here
  }
  result.body match {
    case Left(error) =>
      # Try to cast here
    case Right(r) => Right(r)
  }
c90pui9n

c90pui9n1#

我相信一个条件响应ConditionalResponseAs就是你要找的。

import sttp.client3.*
import sttp.model.StatusCode

// default handler if you don't have ConditionalResponse for the case
def asUnexpectedStatusException
  asStringAlwaysLogged.mapWithMetadata((r, m) => throw UnexpectedStatusCodeException(m.code, r))

fromMetadata(
  asUnexpectedStatusException, // default case
  ConditionalResponseAs( // case for BadRequest status
    _.code == StatusCode.BadRequest,
    asJsonAlwaysUnsafe[AuthErrorResponse].map(throwErrorForResponse.tupled),
  ),
  ConditionalResponseAs(_.isSuccess, asJsonAlwaysUnsafe[SuccessResponse]), // success
)

我的示例使用asJsonAlwaysUnsafe,但这只是因为我手头有这样一个示例,所以您可以自由使用asJson

相关问题