Как в retrofit обработать тело ответа, до обработки его Gson
Клиент получает с сайта json ответ типа {"ключ":"значение"}. Однако в моем случае значение может содержать лишние кавычки {"ключ":"значение содержит "лишние" кавычки"}.
Хочу встроить обработку тела ответа после получения ретрофитом, но до обработки GsonConverterFactory. По принципу HttpLoggingInterceptor в моем примере.
Т.е. допустим у меня есть функция обработчик processing(), которая получает на вход сырой ответ ретрофита, а на выходе дает его же, обработанный внутренней логикой для дальнейшей обработки конвертером Gson.
Подскажите пожалуйста, куда в текущем коде ее можно вставить?
class RetrofitInstance(retrofitType: RetrofitType) {
private val httpLoggInter = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.NONE)
private val okHttpClient = OkHttpClient.Builder()
.addInterceptor(httpLoggInter)
.build()
private val retrofit = Retrofit.Builder()
.baseUrl(retrofitType.baseUrl)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build()
val siteApi: API = retrofit.create(API::class.java)
}
update:
Сделал через изменение полученного ответа с моей модели на Response в API
Было:
interface MySiteApi {
@GET("RandJSON.aspx?CType=12")
suspend fun getJoke18(): JokeModel>
}
suspend fun getJoke18Z(): JokeModel {
return RetrofitInstance.mySiteApi.getJoke18()
}
Стало:
interface MySiteApi {
@GET("RandJSON.aspx?CType=12")
suspend fun getJoke18(): Response<ResponseBody>
}
suspend fun getJoke18Z(): JokeModel {
val response = RetrofitInstance.mySiteApi.getJokeTest()
val responseString = response.body()?.string()
// здесь обработчик полученной строки
val gson = GsonBuilder().create()
val gsonConverted : JokeModel = gson.fromJson(responseString, JokeModel::class.java)
return gsonConverted
}
Но, хотелось бы более элегантного решения. Какой-то свой ConverterFactory чтоли? Или это слишком сложно реализуется?