TP-59445 | PS | handling empty body in network calls (#10024)

Co-authored-by: Sayed Owais Ali <sayed.owais@navi.com>
This commit is contained in:
Prakhar Saxena
2024-03-05 23:24:01 +05:30
committed by GitHub
parent 176fc52a62
commit 1890118af5
15 changed files with 97 additions and 0 deletions

View File

@@ -12,6 +12,7 @@ import com.google.gson.GsonBuilder
import com.navi.ap.utils.registerApUiTronDeSerializers
import com.navi.base.utils.BaseUtils
import com.navi.common.model.NetworkInfo
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import com.navi.naviwidgets.WidgetDataDeserializer
import com.navi.naviwidgets.models.GenericWidgetDataInfo
import com.navi.naviwidgets.models.NaviWidget
@@ -93,6 +94,7 @@ object NetworkModule {
val updatedBaseUrl = BaseUtils.getUpdatedBaseUrl()
return Retrofit.Builder()
.baseUrl(updatedBaseUrl ?: BuildConfig.BASE_URL)
.addConverterFactory(EmptyBodyHandlingConverterFactory())
.addConverterFactory(GsonConverterFactory.create(deserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()
@@ -114,6 +116,7 @@ object NetworkModule {
val retrofit =
Retrofit.Builder()
.baseUrl(updatedBaseUrl ?: BuildConfig.BASE_URL)
.addConverterFactory(EmptyBodyHandlingConverterFactory())
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()
@@ -131,6 +134,7 @@ object NetworkModule {
val retrofit =
Retrofit.Builder()
.baseUrl(updatedBaseUrl ?: BuildConfig.BASE_URL)
.addConverterFactory(EmptyBodyHandlingConverterFactory())
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()

View File

@@ -13,6 +13,7 @@ import com.navi.ap.utils.registerApUiTronDeSerializers
import com.navi.base.utils.BaseUtils
import com.navi.common.model.ModuleName
import com.navi.common.model.NetworkInfo
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import com.navi.naviwidgets.WidgetDataDeserializer
import com.navi.naviwidgets.models.GenericWidgetDataInfo
import com.navi.naviwidgets.models.NaviWidget
@@ -46,6 +47,7 @@ fun createRetrofitClient(okttpClientBuilder: OkHttpClient.Builder): Retrofit {
.create()
return Retrofit.Builder()
.baseUrl(updatedBaseUrl ?: BuildConfig.BASE_URL)
.addConverterFactory(EmptyBodyHandlingConverterFactory())
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
.client(okttpClientBuilder.build())
.build()
@@ -101,6 +103,7 @@ fun createCdnRetrofitClient(okttpClientBuilder: OkHttpClient.Builder): Retrofit
val percentDeserializer = GsonBuilder().create()
return Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(EmptyBodyHandlingConverterFactory())
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
.client(okttpClientBuilder.build())

View File

@@ -18,6 +18,8 @@ import com.navi.ap.network.retrofit.service.APRetrofitService
import com.navi.ap.utils.registerApUiTronDeSerializers
import com.navi.ap.utils.registerPLSpecificDeSerializers
import com.navi.common.CommonLibManager
import com.navi.common.model.ModuleNameV2
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import com.navi.common.uitron.model.action.ThirdPartySdkAction
import com.navi.common.uitron.model.action.UploadDataConfig
import com.navi.common.uitron.serializer.AnySerializer
@@ -88,6 +90,7 @@ object APNetworkModule {
val retrofit =
Retrofit.Builder()
.baseUrl(CommonLibManager.buildConfigDetails.baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.AP.name))
.addConverterFactory(GsonConverterFactory.create(deserializer))
.client(naviApHttpClient.httpClientBuilder.build())
.build()

View File

@@ -15,7 +15,9 @@ import com.navi.amc.network.retrofit.RetrofitService
import com.navi.amc.network.util.getNetworkInfo
import com.navi.amc.network.util.getNetworkInfoSuperApp
import com.navi.common.CommonLibManager
import com.navi.common.model.ModuleNameV2
import com.navi.common.model.NetworkInfo
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import com.navi.naviwidgets.models.NaviWidget
import com.navi.naviwidgets.models.response.CardType
import com.navi.naviwidgets.validations.BaseInputValidation
@@ -74,6 +76,7 @@ object NetworkModule {
): RetrofitService {
val retrofit = Retrofit.Builder()
.baseUrl(CommonLibManager.baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.AMC.name))
.addConverterFactory(GsonConverterFactory.create(deserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()
@@ -90,6 +93,7 @@ object NetworkModule {
): RetrofitService {
val retrofit = Retrofit.Builder()
.baseUrl(CommonLibManager.baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.AMC.name))
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()

View File

@@ -19,7 +19,9 @@ import com.navi.bbps.network.NaviBbpsHttpClient
import com.navi.bbps.network.service.NaviBbpsRetrofitService
import com.navi.common.CommonLibManager
import com.navi.common.model.ModuleName
import com.navi.common.model.ModuleNameV2
import com.navi.common.model.NetworkInfo
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import dagger.Binds
import dagger.Module
import dagger.Provides
@@ -72,6 +74,7 @@ object NaviBbpsNetworkModule {
Retrofit.Builder()
.baseUrl(naviBbpsHttpClient.networkInfo.baseUrl)
.client(naviBbpsHttpClient.httpClientBuilder.build())
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.BBPS.name))
.addConverterFactory(GsonConverterFactory.create(deserializer))
.build()

View File

@@ -15,7 +15,9 @@ import com.navi.chat.network.retrofit.NaviChatHttpClient
import com.navi.chat.provider.firestore.FireStoreDataProvider
import com.navi.chat.repositories.NaviChatRepository
import com.navi.chat.utils.ChatJsonDeserializer
import com.navi.common.model.ModuleNameV2
import com.navi.common.network.BaseUrls
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import com.navi.naviwidgets.models.NaviChatWidget
import com.navi.naviwidgets.models.NaviWidget
import com.navi.naviwidgets.widgets.NaviWidgetJsonDeserializer
@@ -47,6 +49,7 @@ object NaviChatModule {
): Retrofit =
Retrofit.Builder()
.baseUrl(baseUrls.superAppBaseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.CHAT.name))
.addConverterFactory(GsonConverterFactory.create(provideGson()))
.client(naviChatHttpClient.httpClientBuilder.build())
.build()

View File

@@ -8,7 +8,9 @@ import com.navi.coin.network.retrofit.RetrofitService
import com.navi.coin.utils.CountDownFacade
import com.navi.coin.utils.ICountDownHelper
import com.navi.common.CommonLibManager
import com.navi.common.model.ModuleNameV2
import com.navi.common.model.NetworkInfo
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import com.navi.common.utils.registerUiTronDeSerializers
import com.navi.naviwidgets.models.NaviWidget
import com.navi.naviwidgets.validations.BaseInputValidation
@@ -57,6 +59,7 @@ object NetworkModule {
val retrofit =
Retrofit.Builder()
.baseUrl(CommonLibManager.baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.COIN.name))
.addConverterFactory(GsonConverterFactory.create(deserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()

View File

@@ -11,10 +11,12 @@ import android.app.Application
import com.navi.base.deeplink.DeepLinkManager
import com.navi.base.deeplink.listener.DeepLinkListener
import com.navi.common.model.BuildConfigDetails
import com.navi.common.model.ModuleNameV2
import com.navi.common.model.NetworkInfo
import com.navi.common.network.ApiConstants
import com.navi.common.network.authenticator.AuthenticationRetrofitService
import com.navi.common.network.authenticator.AuthenticatorHttpClient
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import com.navi.common.network.retrofit.CommonHttpClient
import com.navi.common.network.retrofit.RetrofitService
import com.navi.common.upi.UpiSdkHelper
@@ -98,6 +100,7 @@ object CommonLibManager {
val retrofitClient =
Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.COMMON.name))
.addConverterFactory(GsonConverterFactory.create())
.client(okttpClientBuilder.build())
.build()
@@ -111,6 +114,7 @@ object CommonLibManager {
val retrofitClient =
Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.COMMON.name))
.addConverterFactory(GsonConverterFactory.create())
.client(okttpClientBuilder.build())
.build()

View File

@@ -0,0 +1,49 @@
/*
*
* * Copyright © 2024 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.common.network.converter
import com.navi.common.utils.CommonNaviAnalytics
import java.lang.reflect.Type
import okhttp3.ResponseBody
import retrofit2.Converter
import retrofit2.Retrofit
class EmptyBodyHandlingConverterFactory(private val moduleName: String? = null) :
Converter.Factory() {
companion object {
const val TAG = "EmptyBodyHandler"
private const val EMPTY_EVENT_NAME = "empty_body_response_error"
}
override fun responseBodyConverter(
type: Type,
annotations: Array<out Annotation>,
retrofit: Retrofit
) =
object : Converter<ResponseBody, Any?> {
val nextResponseBodyConverter =
retrofit.nextResponseBodyConverter<Any?>(
this@EmptyBodyHandlingConverterFactory,
type,
annotations
)
override fun convert(value: ResponseBody): Any? {
return if (value.contentLength() != 0L) {
nextResponseBodyConverter.convert(value)
} else {
CommonNaviAnalytics.naviAnalytics
.Errors()
.onApiFailure("${moduleName.orEmpty()}$EMPTY_EVENT_NAME", null, null, null)
null
}
}
}
}

View File

@@ -3,7 +3,9 @@ package com.navi.gold.di
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.navi.common.CommonLibManager
import com.navi.common.model.ModuleName
import com.navi.common.model.NetworkInfo
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import com.navi.gold.getNetworkInfo
import com.navi.gold.getNetworkInfoSuperApp
import com.navi.gold.retrofit.NaviHttpClient
@@ -67,6 +69,7 @@ object NetworkModule {
): RetrofitService {
val retrofit = Retrofit.Builder()
.baseUrl(CommonLibManager.baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleName.KUBER.name))
.addConverterFactory(GsonConverterFactory.create(deserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()
@@ -83,6 +86,7 @@ object NetworkModule {
): RetrofitService {
val retrofit = Retrofit.Builder()
.baseUrl(CommonLibManager.baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleName.KUBER.name))
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()

View File

@@ -10,7 +10,9 @@ package com.navi.homeloan.common.network.di
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.navi.common.CommonLibManager
import com.navi.common.model.ModuleNameV2
import com.navi.common.model.NetworkInfo
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import com.navi.homeloan.common.network.retrofit.NaviHttpClient
import com.navi.homeloan.common.network.retrofit.RetrofitService
import com.navi.homeloan.common.utils.getNetworkInfo
@@ -73,6 +75,7 @@ object NetworkModule {
val retrofit =
Retrofit.Builder()
.baseUrl(CommonLibManager.baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.HL.name))
.addConverterFactory(GsonConverterFactory.create(deserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()
@@ -89,6 +92,7 @@ object NetworkModule {
val retrofit =
Retrofit.Builder()
.baseUrl(CommonLibManager.baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.HL.name))
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()

View File

@@ -12,6 +12,7 @@ import com.google.gson.GsonBuilder
import com.navi.common.model.ModuleName
import com.navi.common.model.NetworkInfo
import com.navi.common.CommonLibManager
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import com.navi.insurance.common.deserializer.ActionDeserializer
import com.navi.insurance.common.deserializer.ChatInputDeserializer
import com.navi.insurance.common.deserializer.ChatMessageDeserializer
@@ -76,6 +77,7 @@ object NetworkModule {
): Retrofit {
return Retrofit.Builder()
.baseUrl(CommonLibManager.baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleName.GI.name))
.addConverterFactory(GsonConverterFactory.create(deserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()

View File

@@ -13,7 +13,9 @@ import com.google.android.play.core.splitinstall.SplitInstallHelper
import com.google.gson.Gson
import com.navi.base.sharedpref.PreferenceManager
import com.navi.common.model.ModuleName
import com.navi.common.model.ModuleNameV2
import com.navi.common.model.NetworkInfo
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import com.navi.common.utils.log
import com.navi.pay.common.cache.ImageCache
import com.navi.pay.common.cache.ImageCacheImpl
@@ -101,6 +103,7 @@ object NaviPayNetworkModule {
Retrofit.Builder()
.baseUrl(naviPayHttpClient.networkInfo.baseUrl)
.client(naviPayHttpClient.httpClientBuilder.build())
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.NAVIPAY.name))
.addConverterFactory(GsonConverterFactory.create(deserializer))
.build()

View File

@@ -3,6 +3,8 @@ package com.navi.payment.network.di
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import com.navi.common.CommonLibManager
import com.navi.common.model.ModuleNameV2
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import com.navi.common.utils.registerUiTronDeSerializers
import com.navi.payment.model.initiatesdk.InitiatePaymentSDKConfig
import com.navi.payment.model.paymentresult.PaymentSDKActionConfig
@@ -69,6 +71,7 @@ object PaymentNetworkModule {
): Retrofit {
return Retrofit.Builder()
.baseUrl(CommonLibManager.baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.NAVI_PAYMENT_SCREEN.name))
.addConverterFactory(GsonConverterFactory.create(deserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()
@@ -121,6 +124,7 @@ object PaymentNetworkModule {
fun getPaymentRetrofitService(): RetrofitService {
return Retrofit.Builder()
.baseUrl(CommonLibManager.baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.NAVI_PAYMENT_SCREEN.name))
.addConverterFactory(GsonConverterFactory.create(providesPaymentDeserializer()))
.client(
NaviHttpClient(

View File

@@ -9,7 +9,9 @@ package com.navi.rr.network.di
import com.google.gson.Gson
import com.navi.common.CommonLibManager
import com.navi.common.model.ModuleNameV2
import com.navi.common.model.NetworkInfo
import com.navi.common.network.converter.EmptyBodyHandlingConverterFactory
import com.navi.rr.network.retrofit.NaviHttpClient
import com.navi.rr.network.retrofit.RetrofitService
import com.navi.rr.network.util.getNetworkInfo
@@ -73,6 +75,7 @@ object NetworkModule {
val retrofit =
Retrofit.Builder()
.baseUrl(CommonLibManager.baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.REWARDS.name))
.addConverterFactory(GsonConverterFactory.create(deserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()
@@ -89,6 +92,7 @@ object NetworkModule {
val retrofit =
Retrofit.Builder()
.baseUrl(CommonLibManager.baseUrl)
.addConverterFactory(EmptyBodyHandlingConverterFactory(ModuleNameV2.REWARDS.name))
.addConverterFactory(GsonConverterFactory.create(percentDeserializer))
.client(naviHttpClient.httpClientBuilder.build())
.build()