从Java调用Ktor客户端:已检查异常的处理方案探讨
用Ktor HTTP客户端处理Java调用时的已检查异常方案
我正在开发一个基于Ktor HTTP客户端的通用服务调用库,需要支持Java代码调用。但Ktor的HTTP调用(比如httpClient.post(...))会抛出Java层面的已检查异常,常规的处理方案是给库中所有对外函数添加@Throws注解,明确标注可能抛出的已检查异常(Kotlin本身不区分已检查/未检查异常)。
不过可以通过配置Ktor的HttpCallValidator插件,把所有已检查异常统一包装成RuntimeException抛出,避免给每个函数加注解的繁琐操作,示例代码如下:
val httpClient = HttpClient { install(HttpCallValidator) { handleResponseExceptionWithRequest { ex, _ -> if(ex !is RuntimeException) throw RuntimeException(ex) } } }
这个配置会拦截Ktor客户端抛出的所有响应异常,只要异常不是RuntimeException类型,就将其包装为RuntimeException重新抛出。这样Java调用方无需处理已检查异常,只需要根据业务需求捕获RuntimeException即可。
内容的提问来源于stack exchange,提问作者chriptus13
相关产品推荐
相关产品推荐

