了解如何处理空响应



我使用Ktor和像这样的myentity = client.get(url)行来从API响应中获取和反序列化我的实体。当API返回一些东西时,它可以正常工作,但是一旦API没有返回并发送HTTP 204响应,它就会以io.ktor.client.call.NoTransformationFoundException失败。

我想找到一种方法,如何使client.get()返回null而不是抛出该异常。我一直在寻找解决办法,但是没有找到。似乎HttpResponseValidator在初始化的HttpClient可能会有所帮助,但我只找到一种方法如何抛出另一个异常,但不明白如何改变返回值。

如果抛出异常,您可以捕获NoTransformationFoundException并将null分配给myentity。下面是一个例子:

import io.ktor.client.*
import io.ktor.client.call.*
import io.ktor.client.engine.okhttp.*
import io.ktor.client.plugins.contentnegotiation.*
import io.ktor.client.request.*
import io.ktor.serialization.kotlinx.json.*
import kotlinx.serialization.json.Json
suspend fun main() {
val client = HttpClient(OkHttp) {
install(ContentNegotiation) {
json(Json { ignoreUnknownKeys = true })
}
}
val response = try {
client.get("https://httpbin.org/status/204").body<HttpBin>()
} catch (cause: NoTransformationFoundException) {
null
}
println(response?.origin)
}
@kotlinx.serialization.Serializable
class HttpBin(val origin: String)

相关内容

  • 没有找到相关文章

最新更新