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