我想从我的API REST获取原始http响应。我试过这个界面:
@POST("/login")
@FormUrlEncoded
Call<retrofit.Response> login(@Field("username") String login, @Field("password") String pass,
@Field("appName") String appName, @Field("appKey") String appKey);
但我明白了:
java.lang.IllegalArgumentException:无法为其创建调用适配器 retrofit.Call 方法Api.login
我以这种方式创建Retrofit
:
Retrofit.Builder retrofitBuilder = new Retrofit.Builder();
retrofitBuilder.addConverterFactory(JacksonConverterFactory.create());
Retrofit retrofitAdapter = retrofitBuilder.baseUrl(baseUrl).build();
return retrofitAdapter.create(apiClass);
答案 0 :(得分:65)
要访问原始响应,请使用okhttp中的ResponseBody
作为您的通话类型。
Call<ResponseBody> login(...)
在回调中,您可以使用响应的code
方法检查响应代码。这适用于任何改装2返回类型,因为您的回调始终会使用您的实际返回类型参数化Response
。对于异步 -
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();
}
});
用于同步通话 -
Response<ResponseBody> response = myCall.execute();
System.out.println("response code" + response.code());
答案 1 :(得分:2)
我有同样的问题,但有一个不同的解决方案。我接受了请求并使用OkHttp3Client发送它。像这样:
//raw text
Request request = call.clone().request();
OkHttpClient client = new OkHttpClient();
okhttp3.Response test = client.newCall(request).execute();
System.out.println(test.body().string());