Как в 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 чтоли? Или это слишком сложно реализуется?


Ответы (0 шт):