使用Retrofit获取原始HTTP响应

时间:2015-10-22 13:59:59

标签: java jackson retrofit

我想从我的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);

2 个答案:

答案 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());

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