Logging with Retrofit 2

前端 未结 21 1352
春和景丽
春和景丽 2020-11-22 07:33

I\'m trying to get the exact JSON that is being sent in the request. Here is my code:

OkHttpClient client = new OkHt         


        
21条回答
  •  心在旅途
    2020-11-22 08:08

    Here is an Interceptor that logs both the request and response bodies (using Timber, based on an example from the OkHttp docs and some other SO answers):

    public class TimberLoggingInterceptor implements Interceptor {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
    
            long t1 = System.nanoTime();
            Timber.i("Sending request %s on %s%n%s", request.url(), chain.connection(), request.headers());
            Timber.v("REQUEST BODY BEGIN\n%s\nREQUEST BODY END", bodyToString(request));
    
            Response response = chain.proceed(request);
    
            ResponseBody responseBody = response.body();
            String responseBodyString = response.body().string();
    
            // now we have extracted the response body but in the process
            // we have consumed the original reponse and can't read it again
            // so we need to build a new one to return from this method
    
            Response newResponse = response.newBuilder().body(ResponseBody.create(responseBody.contentType(), responseBodyString.getBytes())).build();
    
            long t2 = System.nanoTime();
            Timber.i("Received response for %s in %.1fms%n%s", response.request().url(), (t2 - t1) / 1e6d, response.headers());
            Timber.v("RESPONSE BODY BEGIN:\n%s\nRESPONSE BODY END", responseBodyString);
    
            return newResponse;
        }
    
        private static String bodyToString(final Request request){
    
            try {
                final Request copy = request.newBuilder().build();
                final Buffer buffer = new Buffer();
                copy.body().writeTo(buffer);
                return buffer.readUtf8();
            } catch (final IOException e) {
                return "did not work";
            }
        }
    }
    

提交回复
热议问题