Consumir One-Shot ResponseBody de Okhttp causa problemas con Retrofit

Estoy usando un Retrofit con un interceptor Okhttp para detectar si mi token oauth ha expirado. Si el token ha expirado, quiero solicitar un nuevo token, vuelva a intentar la solicitud y luego envíe esa respuesta a Retrofit.

Aquí está mi clase de interceptor:

public class CustomInterceptor implements Interceptor {

@Override
public Response intercept(Chain chain) throws IOException {
    Request request = chain.request();

    // try the request
    Response response = chain.proceed(request);

    if (response.body().string().contains(Constants.TOKEN_AUTH_ERROR_MESSAGE)) {
        Log.v("retrofit_error", "token expired");

        //get current token, create headers
        OAuthTokenResponse expiredToken = SharedPreferencesUtil.getOAuthToken();

        OAuthTokenResponse newOauthToken = RestClient.getInstance().getTokenService().refreshOauthToken(expiredToken.getRefreshToken());

        //store new token, return
        SharedPreferencesUtil.saveOAuthToken(newOauthToken);

        // create a new request and modify it accordingly using the new token
        Request.Builder newRequestBuilder = request.newBuilder()
                .removeHeader("Authorization");

        Request newRequest = newRequestBuilder.addHeader("Authorization", SharedPreferencesUtil.getOAuthToken().getAccessToken()).build();
        // retry the request
        return chain.proceed(newRequest);
    }

    // otherwise just pass the original response on
    return response;
}

}

El problema es que llamar a response.body.string () consumirá el ResponseBody debido a que es un valor de una sola vez como indica el estado de los documentos Okhttp.

Esto significa que la Respuesta que se devuelve al final del código ya no contendrá el cuerpo cuando se pase a la actualización. ¿Hay alguna manera de que pueda consumir el cuerpo mientras lo devuelvo con la respuesta?

¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta