0

I am using Retrofit with OkHttp. I like to add okhttp3.Interceptor to log the annotation path.

For example:

@GET("posts/{post_id}")
suspend fun getPost(@Path("post_id") postId: String): Response<Post>

Interceptor

class MyInterceptor : Interceptor {
    @Throws(IOException::class)
    override fun intercept(chain: Chain): Response {
          // log the path here
    }
}

I like to log posts/{post_id} each time getPost is called. How can it be achieved?

Ilya Gazman
  • 31,250
  • 24
  • 137
  • 216

2 Answers2

0

found the answer in the tags of the request

    fun extractPath(request: Request) = request.run {
        javaClass.getDeclaredField("tags").let {
            it.isAccessible = true
            @Suppress("UNCHECKED_CAST")
            it.get(this) as Map<Class<*>, Any>
        }
    }.run {
        values.first().run {
            javaClass.getDeclaredField("method").let {
                it.isAccessible = true
                (it.get(this) as Method).annotations[0]
            }
        }
    }.run {
        when (this) {
            is DELETE -> value
            is GET -> value
            is HEAD -> value
            is OPTIONS -> value
            is PATCH -> value
            is POST -> value
            is PUT -> value
            else -> null
        }
    }
Ilya Gazman
  • 31,250
  • 24
  • 137
  • 216
0

You may want to check out HttpLoggingInterceptor, for example here.

David Soroko
  • 8,521
  • 2
  • 39
  • 51