我有一个Interceptor
实现,它向请求添加了必需的标头。开发人员有时会忘记将必需的@Header("foobar")
注释添加到服务接口方法。在这种情况下,我的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 ")
}
在未使用翻新注释对参数进行注释的情况下,它自身可以添加方法名称。
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)
答案 0 :(得分:1)
经过一番挖掘,我发现Retrofit2将调用对象注入到原始请求中,该请求可以通过以下方式访问:
chain.call().request().tag(retrofit2.Invocation.class))
标签将被插入到requestFactory.create(Object [] args)方法的retrofit2中。
注意,这是使用Retrofit2 2.5.0完成的,早期版本可能有所不同