volley example ejemplo consumir java jackson retrofit

java - example - Obtenga una respuesta HTTP sin procesar con Retrofit



retrofit vs volley (3)

Quiero obtener la respuesta HTTP sin formato de mi API REST. Lo he intentado con esta interfaz:

@POST("/login") @FormUrlEncoded Call<retrofit.Response> login(@Field("username") String login, @Field("password") String pass, @Field("appName") String appName, @Field("appKey") String appKey);

Pero entiendo:

java.lang.IllegalArgumentException: no se puede crear el adaptador de llamada para la actualización. Llamar al método Api.login

Creo Retrofit esta manera:

Retrofit.Builder retrofitBuilder = new Retrofit.Builder(); retrofitBuilder.addConverterFactory(JacksonConverterFactory.create()); Retrofit retrofitAdapter = retrofitBuilder.baseUrl(baseUrl).build(); return retrofitAdapter.create(apiClass);


Para obtener acceso a la respuesta sin formato, use ResponseBody de okhttp como su tipo de llamada.

Call<ResponseBody> login(...)

En su devolución de llamada, puede verificar el código de respuesta con el método de code de la respuesta. Esto se aplica a cualquier tipo de devolución de retroadaptación 2, porque su devolución de llamada siempre obtiene una Response parametrizada con su tipo de devolución real. Para asíncrono

Call<ResponseBody> myCall = myApi.login(...) myCall.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Response<ResponseBody> response, Retrofit retrofit) { // access response code with response.code() // access string of the response with response.body().string() } @Override public void onFailure(Throwable t) { t.printStackTrace(); } });

para llamadas sincrónicas -

Response<ResponseBody> response = myCall.execute(); System.out.println("response code" + response.code());


Puede obtener información sobre encabezados, código de respuesta, hasta el cuerpo de respuesta raw json mediante el uso de Interceptors . Puede escribir sus Interceptores personalizados, pero prefiero usar el Interceptor de registro propio de Square. Está disponible en maven central.

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

He aquí cómo usarlo

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

Nivel de registro BODY imprimirá encabezados a la respuesta del cuerpo. Y en su Retrofit

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

Ahora, abra Log Cat y verá la respuesta HTTP sin formato.

¡Precaución!

¡No olvide eliminar Interceptores (o cambie el Nivel de registro a NINGUNO) en producción! De lo contrario, las personas podrán ver su solicitud y respuesta en Log Cat.


Tuve el mismo problema pero una solución diferente. Tomé la solicitud y la envié con OkHttp3Client. Me gusta esto:

//raw text Request request = call.clone().request(); OkHttpClient client = new OkHttpClient(); okhttp3.Response test = client.newCall(request).execute(); System.out.println(test.body().string());

fuente: http://robinhenniges.com/de/retrofit-2-raw-response