概要
OkHttpのAuthenticatorを使用して、ステータスコードが401の場合にアクセストークンを更新する処理を実装していました。しかし、アクセストークンが無効なエラーがステータスコードが400で返されることがあり、本来はAPIの仕様を変更してもらうのが適切な解決策ですが、その際にもクライアント側でアクセストークンを更新するようにしました。
対応方法
Authenticatorへはステータスコードが401の場合のみリクエストが到達するため、ステータスコードが400の場合に401に変更するInterceptorを適用しました。
class ReplaceStatusCodeInterceptor() : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val response = chain.proceed(chain.request())
return if (response.code != 400) {
response
} else {
response.newBuilder().code(401).build()
}
}
}