我正试图通过改型2获得原始响应。0.2.
到目前为止,我试图使用以下代码行打印响应,但它打印的是地址,而不是确切的响应正文。
日志i(“原始消息”,response.body()。toString());
compile'com。收拾一下。改装2:改装:2.0.2'
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
GitApi gitApi = retrofit.create(GitApi.class);
Call<Addresses> call = gitApi.getFeed(user);
call.enqueue(new Callback<Addresses>() {
@Override
public void onResponse(Response<Addresses> response, Retrofit retrofit) {
try {
mDisplayDetails.setText(response.body().getSuburbs().get(0).getText());
**Log.i("RAW MESSAGE",response.body().toString());**
} catch (Exception e) {
mDisplayDetails.setText(e.getMessage());
}
mProgressBar.setVisibility(View.INVISIBLE);
}
@Override
public void onFailure(Throwable t) {
mDisplayDetails.setText(t.getMessage());
mProgressBar.setVisibility(View.INVISIBLE);
}
});
简单使用:
Log.i("RAW MESSAGE", response.raw().body().string());
或者:
Log.i("RAW MESSAGE", response.body().string());
您必须在通话中使用okhttp3中的“ResponseBook”。然后,获取“response.body().string()”以获取服务器提供给您的JSONObject。如果在解析服务器对模型对象的响应时出现任何错误,这是捕获错误的好方法。
这是因为它已经通过转换器转换为对象。要获得原始的json,您需要在您的Http客户端上拦截器。谢天谢地,您不需要编写自己的类,Square已经为您提供了HttpLoggingInterceptor类。
将此添加到你的应用程序级别gradle
compile 'com.squareup.okhttp3:logging-interceptor:3.5.0'
并在您的OkHttpClient中使用它
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor).build();
别忘了在改造中更换您的HttpClient。
Retrofit retrofit = new Retrofit.Builder()
.client(client)
.baseUrl("https://yourapi.com/api/")
.build();
在Log Cat中,您将看到原始json响应。有关更多信息,请访问Square的OkHttp github。
小心
不要忘记在生产中删除拦截器(或将日志记录级别更改为无)!否则人们将能够在Log Cat上看到您的请求和响应。
我正在使用调用web服务,而reverfit会引发一个失败,来自“throwable”的消息会给我 我假设这是因为.NET web服务抛出了一个错误而没有返回JSON。但是为了证明这一点,我需要能够看到中的原始响应。有没有什么我能做到的? 这是我使用的代码
因此,当我对服务器进行POST API调用时,我得到一个带有JSON响应的400 Bad Request错误。 我管它叫 然而,问题是,一旦我得到响应,就调用onFailure(),这样就调用了//bb。在这里,我无法访问JSON响应。当我记录api请求和响应时,它根本不显示JSON响应。而可抛出的t是IOException。然而,奇怪的是,当我对Postman进行相同的调用时,它确实返回了预期的
在referfit中,您只能读取response.body()一次,因为它是一个流,一旦调用或自动转换为返回类型中的任何模型类,它就会自动关闭。如果你尝试读两次,那么你会得到上面的错误。 我既需要原始响应字符串,也需要模型类。做这件事最好的方法是什么?我不想调用两次API。有什么方法可以复制响应体吗?理想情况下,我希望简单地获取String并返回响应。也就是说,不必放弃改型带来的通用类型转换器的好
有没有一种方法来捕获400到599超文本传输协议状态在onFail()方法通过使用改造2.0?每当其他api返回400,401等,然后改型像200响应,并在on成功()上处理它。我怎样才能实现呢?
如何将此Json响应转换为改装bean我得到了Gson错误,就像使用JsonReader一样。setLenient(true)在第1行第1列路径接受格式错误的JSON$ api调用为 字符串CATEGORY\u API=“”https://api.callingservice.com"; 请帮助我解决这个问题,如何将Json响应转换为Bean,我的Bean类如下