I want to get the raw http response from my API REST. I have tried with this interface:
@POST("/login")
@FormUrlEncoded
Call login(@Field("username") String login, @Field("password") String pass,
@Field("appName") String appName, @Field("appKey") String appKey);
But I get:
java.lang.IllegalArgumentException: Unable to create call adapter for
retrofit.Call
for method Api.login
I create Retrofit this way:
Retrofit.Builder retrofitBuilder = new Retrofit.Builder();
retrofitBuilder.addConverterFactory(JacksonConverterFactory.create());
Retrofit retrofitAdapter = retrofitBuilder.baseUrl(baseUrl).build();
return retrofitAdapter.create(apiClass);
解决方案
To get access to the raw response, use ResponseBody from okhttp as your call type.
Call login(...)
In your callback, you can check the response code with the code method of the response. This applies to any retrofit 2 return type, because your callback always gets a Response parameterized with your actual return type. For asynchronous --
Call myCall = myApi.login(...)
myCall.enqueue(new Callback() {
@Override
public void onResponse(Response 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();
}
});
for synchronous calls --
Response response = myCall.execute();
System.out.println("response code" + response.code());