I’m trying to setup a middleware like chain for processing ktor client errors. Imagine a pipeline of
[ModelValidationHandler, AuthErrorHandler]
and so on.
Similar to the
Logging
feature, I’ve implemented my handlers as
HttpClientFeature<*, *>
. The issue I’m having is once one of my handlers reads the
content
ByteReadChannel
of the
HttpResponse
as a
String
, the channel is fully read, and no other Handler can read it.
I read the response like this:
val observer: ResponseHandler = { response ->
try {
val message = response.content
.readRemaining()
.readText(charset = response.charset()?: Charsets.UTF_8)
} catch (_: Throwable) {
}
}
ResponseObserver.install(ResponseObserver(observer), scope)
The
Logging
feature does not have this limitation. It can log the response, and I can still read it once. Am I consuming the wrong response?