From 71f6a1eeee412045cc08ce8894194573362cb8f0 Mon Sep 17 00:00:00 2001 From: adamw Date: Thu, 31 Aug 2017 14:32:01 +0200 Subject: Response.body is now an Either[String, T], to handle cases when the status code isn't 2xx --- .../com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'okhttp-handler/src/main/scala/com/softwaremill') diff --git a/okhttp-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala b/okhttp-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala index b95bf8a..af44132 100644 --- a/okhttp-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala +++ b/okhttp-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala @@ -86,7 +86,15 @@ abstract class OkHttpHandler[R[_], S](client: OkHttpClient) res: OkHttpResponse, responseAs: ResponseAs[T, S]): R[Response[T]] = { - val body = responseHandler(res).handle(responseAs, responseMonad) + val code = res.code() + + val body = if (codeIsSuccess(code)) { + responseMonad.map(responseHandler(res).handle(responseAs, responseMonad), + Right(_: T)) + } else { + responseMonad.map(responseHandler(res).handle(asString, responseMonad), + Left(_: String)) + } val headers = res .headers() @@ -94,7 +102,9 @@ abstract class OkHttpHandler[R[_], S](client: OkHttpClient) .asScala .flatMap(name => res.headers().values(name).asScala.map((name, _))) - responseMonad.map(body, Response(_: T, res.code(), headers.toList)) + responseMonad.map( + body, + Response(_: Either[String, T], res.code(), headers.toList)) } private def responseHandler(res: OkHttpResponse) = -- cgit v1.2.3