Retrofit2에 Interceptor 추가하기

지프치프·2022년 11월 3일
0

Android

목록 보기
54/89
post-thumbnail

“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”


개요

Retrofit2를 이용해서 Rest 통신을 하다보면 고정적으로 Header를 달아야 할 때가 있다.
Retrofit Interface에서 @Header 어노테이션을 일일이 달아주기엔 수고스러울 때 말이다.
이럴땐 ohhttp3의 힘을 빌리면 된다!
정확히는 okhttp로 header를 추가한 interceptor를 httpclient에 담아서 retrofit instance에 탑재해주면 된다.

Code

먼저 아래의 코드는 Retrofit의 instance를 싱글톤으로 구현한 경우이다.

object RetroClient {
    private var instance: Retrofit? = null
    private val httpClient = OkHttpClient.Builder().apply {
        addInterceptor(object : Interceptor {
            override fun intercept(chain: Interceptor.Chain): Response {
                val request = chain.request().newBuilder().addHeader(
                    "Authorization",	// Header 이름
                    NetworkConstants.API_KEY	// 값
                ).build()
                return chain.proceed(request)
            }
        })
    }

    @Synchronized
    fun getInstance() : Retrofit {
        instance?.let {
            return it
        } ?: run {
            instance = Retrofit.Builder().apply {
                baseUrl(NetworkConstants.BASE_URL)
                addConverterFactory(GsonConverterFactory.create())
                client(httpClient.build())
            }.build()
            return instance!!
        }
    }
}

이렇게 해주면 retrofit을 통해서 보내지는 request에는
고정적으로 Authorization이라는 header가 담겨서 보내게 된다.

개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.

profile
지프처럼 거침없는 개발을 하고싶은 개발자

0개의 댓글