Retrofit 2.0 cómo imprimir la respuesta json completa?

Me voy de Volley a Retrofit actualmente versión 2.0.

¿Cómo imprimir el código de respuesta completo de json?

Incluye :

compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' 

RestClient :

 OkHttpClient client = new OkHttpClient(); client.interceptors().add(new Interceptor() { @Override public Response intercept(Interceptor.Chain chain) throws IOException { Response response = chain.proceed(chain.request()); return response; } }); Gson gson = new GsonBuilder() .setDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'") .create(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(ROOT) .addConverterFactory(GsonConverterFactory.create(gson)) .client(client) .build(); REST_CLIENT = retrofit.create(APIService.class); 

APIService :

  @GET("my/json") Call<Model> getFeed(); 

En Actividad – API de llamada :

 Call<Model> call = RestClient.get().getFeed(); call.enqueue(new Callback<Model>() { @Override public void onResponse(Response<Model> response, Retrofit retrofit) { Log.w("2.0 getFeed > response.raw() => ", response.raw().toString());//DONT WORK Log.w("2.0 getFeed > retrofit => ", retrofit.toString());//DONT WORK Log.w("2.0 getFeed > body => ", response.body().toString()); //DONT WORK Log.w("2.0 getFeed > getStatus => ", response.body().getStatus()); } @Override public void onFailure(Throwable t) { t.printStackTrace(); Log.e("2.0 getFeed > onFailure => ", t.toString()); } }); 

Para imprimir la respuesta completa en json:

 Log.w("2.0 getFeed > Full json res wrapped in gson => ",new Gson().toJson(response)); 

Si desea tener una función de impresión bonita , utilice:

 Log.w("2.0 getFeed > Full json res wrapped in pretty printed gson => ",new GsonBuilder().setPrettyPrinting().create().toJson(response)); 

Tenga en cuenta que esto imprime los datos deserializados (no la respuesta Raw como devuelta desde el servidor). Para obtener la respuesta sin procesar, necesitaría tratar HttpLoggingInterceptor o HttpLoggingInterceptor .

Conecte la siguiente clase de interceptor como esta

 OkHttpClient client = new OkHttpClient(); client.interceptors().add(new LoggingInterceptor()); 

////// Interceptor clase

 public static class LoggingInterceptor implements Interceptor { @Override public com.squareup.okhttp.Response intercept(Chain chain) throws IOException { Log.i("LoggingInterceptor","inside intercept callback"); Request request = chain.request(); long t1 = System.nanoTime(); String requestLog = String.format("Sending request %s on %s%n%s", request.url(), chain.connection(), request.headers()); if(request.method().compareToIgnoreCase("post")==0){ requestLog ="\n"+requestLog+"\n"+bodyToString(request); } Log.d("TAG","request"+"\n"+requestLog); com.squareup.okhttp.Response response = chain.proceed(request); long t2 = System.nanoTime(); String responseLog = String.format("Received response for %s in %.1fms%n%s", response.request().url(), (t2 - t1) / 1e6d, response.headers()); String bodyString = response.body().string(); Log.d("TAG","response only"+"\n"+bodyString); Log.d("TAG","response"+"\n"+responseLog+"\n"+bodyString); return response.newBuilder() .body(ResponseBody.create(response.body().contentType(), bodyString)) .build(); } public 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"; } }` 

Cortesía : https://github.com/square/retrofit/issues/1072#

En realidad Square ya crean una clase sólo para esto, solo agrega

 HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(interceptor).build(); 

Y, en Retrofit

 Retrofit retrofit = new Retrofit.Builder() .client(client) .baseUrl("https://yourapi.com/api/") .build(); 

La clase interceptora está en maven central

 compile 'com.squareup.okhttp3:logging-interceptor:3.5.0' 

Puede establecer el nivel de registro en la clase HttpLoggingInterceptor. El CUERPO es el verbo (imprime todo al Cuerpo). Más información está disponible en OkHttp github

¡Precaución!

¡No olvide eliminar los Interceptores (o cambiar el Nivel de Registro a NINGUNO) en producción! De lo contrario, la gente podrá ver su solicitud y respuesta en Log Cat.

Prueba esto !!

  Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build(); /** Handles Log */ retrofit.client().interceptors().add(new LoggingInterceptor()); mRestClient = retrofit.create(RestServices.class); class LoggingInterceptor implements Interceptor { @Override public Response intercept(Interceptor.Chain chain) throws IOException { Request request = chain.request(); long t1 = System.nanoTime(); Logger.d(String.format("Sending request %s on %s%n%s", request.url(), chain.connection(), request.headers())); Response response = chain.proceed(request); long t2 = System.nanoTime(); Logger.d(String.format("Received response for %s in %.1fms%n%s", response.request().url(), (t2 - t1) / 1e6d, response.headers())); final String responseString = new String(response.body().bytes()); Logger.d("Response: " + responseString); return response.newBuilder() .body(ResponseBody.create(response.body().contentType(), responseString)) .build(); } 

¡Compruebe esta demostración !!!

Para obtener respuesta completa en Json en retrofit2.3.0 utilice a continuación.

Esto funciona para mí.

 call.enqueue(new Callback<someList>() { @Override public void onResponse(Call<someList> call, Response<someList> response) { if (response.isSuccessful()) Log.e("Success", new Gson().toJson(response.body())); else Log.e("unSuccess", new Gson().toJson(response.errorBody())); } @Override public void onFailure(Call<someList> call, Throwable t) { Log.e("onFailure", t.toString()); } }); 
 Call<Model> call = RestClient.get().getFeed();call.enqueue(new Callbstrong textack<Model>() { @Override public void onResponse(Response<Model> response, Retrofit retrofit) { //try this Call<Model> call = response.body(); // this is enough for retrieve model } @Override public void onFailure(Throwable t) { t.printStackTrace(); og.e("2.0 getFeed > onFailure => ", t.toString()); } }); 

Puede establecer el nivel de registro en su adaptador de retroadaptación como se muestra a continuación y ver la respuesta y otros datos como encabezado, código de respuesta vs.

 setLogLevel(LogLevel.FULL) 

Editar: Esto no funciona en Retrofit 2.0. Si está utilizando 1.9 puede utilizar.

  • Javax.net.ssl.SSLHandshakeException: Handshake falló en Android 5.0.0 cuando SSLv2 y SSlv3 están deshabilitados (sólo TLS) (y mayores)
  • RxJava y Retrofit - Aumento de excepciones personalizadas en función de la respuesta del servidor
  • Configuración de Android studio 1.1.0 minifyEnabled true causando problemas con la aplicación
  • ¿Cómo estructurar mi aplicación usando MVP con rxjava y retrofit para obtener datos de Observables?
  • ¿Cómo puedo hacer peticiones simultáneas más rápido con Retrofit / OkHttp?
  • RxJava: ¿Cómo reanudar el trabajo de un observable si se produce un cambio de configuración?
  • ¿Tenemos alguna posibilidad de detener la solicitud en OkHttp Interceptor?
  • Java.lang.NoClassDefFoundError: io.reactivex.Observable
  • Cómo analizar la matriz JSON sin ningún objeto en Retrofit?
  • Retrofit "Autorización", "Portador" + token
  • Problemas al integrar el convertidor Simple XML en retrofit para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.