“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”
Retrofit2를 이용해서 Rest 통신을 하다보면 고정적으로 Header를 달아야 할 때가 있다.
Retrofit Interface에서 @Header 어노테이션을 일일이 달아주기엔 수고스러울 때 말이다.
이럴땐 ohhttp3의 힘을 빌리면 된다!
정확히는 okhttp로 header를 추가한 interceptor를 httpclient에 담아서 retrofit instance에 탑재해주면 된다.
먼저 아래의 코드는 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가 담겨서 보내게 된다.
개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.