gpt4 book ai didi

java - Retrofit:如何获取被调用的服务方法的名称?

转载 作者:行者123 更新时间:2023-12-01 19:40:43 43 4
gpt4 key购买 nike

我有一个 Interceptor 实现,它向请求添加所需的 header 。开发人员有时会忘记将所需的 @Header("foobar") 注释添加到服务接口(interface)方法中。在这种情况下,我的 Interceptor 抛出一个 IllegalArgumentException 指示缺少注释。不幸的是,异常消息中并不清楚调用了哪个服务方法。我想提供被调用的服务方法的名称。有可能吗?

这是我的(kotlin)代码:

    @Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {

val request = chain.request()
val identifier = request.header(REQUIRED_HEADER) ?: run {
val methodName= // how to get the service method name?
throw IllegalArgumentException("Missing annotation >@Header(REQUIRED_HEADER)< on service method: $methodName ")

}

Retrofit it self可以添加方法名称,以防参数未使用Retrofit注释进行注释。

java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #1)
for method HonkAndFlashFalService.startHonkAndFlash
at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:755)
at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:746)
at retrofit2.ServiceMethod$Builder.parameterError(ServiceMethod.java:764)

最佳答案

经过一番挖掘,我发现 Retrofit2 将一个调用对象注入(inject)到原始请求中,该对象应该可以通过以下方式访问:

chain.call().request().tag(retrofit2.Invocation.class))

该标签被注入(inject)到 RequestFactory.create(Object[] args) 方法中的 Retrofit2 中。

注意,这是用 Retrofit2 2.5.0 完成的,早期版本可能有所不同

关于java - Retrofit:如何获取被调用的服务方法的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55471117/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com