How To Get Raw Response And Request Using Retrofit 2.0
Solution 1:
That's because it's already converted to an object by converter. To get the raw json, you need an interceptor on your Http Client. Thankfully you don't need to write your own class, Square already provide HttpLoggingInterceptor class for you.
Add this on your app-level gradle
compile'com.squareup.okhttp3:logging-interceptor:3.5.0'
And use it in your OkHttpClient
HttpLoggingInterceptorinterceptor=newHttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClientclient=newOkHttpClient.Builder()
.addInterceptor(interceptor).build();
Don't forget to change your HttpClient in Retrofit.
Retrofitretrofit=newRetrofit.Builder()
.client(client)
.baseUrl("https://yourapi.com/api/")
.build();
In the Log Cat you'll see the raw json response. Further information is available on Square's OkHttp github.
Caution!
Don't forget to remove Interceptors (or change Logging Level to NONE) in production! Otherwise people will be able to see your request and response on Log Cat.
Solution 2:
You have to use "ResponseBody" from okhttp3 in your call. Then, get "response.body().string()" to get the JSONObject as your server gives to you. It's a good way to catch errors if there are any errors parsing server response to your model object.
Solution 3:
Simply use:
Log.i("RAW MESSAGE", response.raw().body().string());
Or:
Log.i("RAW MESSAGE", response.body().string());
Solution 4:
Guess you want to see the raw response body for debugging purpose. There are two ways to do this.
Using
okhttp3.logging.HttpLoggingInterceptor
as @aldok mentioned.If you want to check some properties of the response object, or convert the json(response body) to POJO manually, you may want to do it like this:
Don't use the addConverterFactory while initializing the retrofit client, comment this line.
retrofit = new Retrofit.Builder()
.client(client)
.baseUrl(BASE_URL)
//.addConverterFactory(GsonConverterFactory.create())
.build();
Then consuming the response like this:
Call<ResponseBody> topRatedResponseCall = apiService.getTopRatedMoves(API_KEY);
topRatedResponseCall.enqueue(newCallback<ResponseBody>() {
@OverridepublicvoidonResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
try {
Log.d(LOG_TAG, response.body().string());
int code = response.code();
testText.setText(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
@OverridepublicvoidonFailure(Call<ResponseBody> call, Throwable t) {
}
});
Hope this would help~
Post a Comment for "How To Get Raw Response And Request Using Retrofit 2.0"