使用Retrofit 2.0 POST方法获取请求正文内容 [英] Getting Request body content using Retrofit 2.0 POST method
问题描述
在执行enque
操作之前,我需要获取请求正文并使用Retrofit 2.0执行一些逻辑操作.但是很遗憾,我无法从服务电话中获取帖子正文.目前,经过大量搜索后,我发现只有一种解决方案,例如logging
和request
,我正在使用
I have a requirement to get a request body and to perform some logic operations with Retrofit 2.0 before doing enque
operation. But unfortunately I am not able to get the post body content from my service call. At present after searching a lot I found only one solution like logging
the request
that I am posting using Retrofit 2.0 from this method by using HttpLoggingInterceptor
with OkHttpClient
. I am using the following code to log the request body in the Android Logcat:
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(Level.BODY);
OkHttpClient httpClient = new OkHttpClient();
httpClient.interceptors().add(logging);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseURL)
.addConverterFactory(GsonConverterFactory.create())
.build();
return retrofit.create(apiClass);
上述方法所面临的问题:
- 请求正文仅在默认的Android Logcat之类的 上可见
02-04 01:35:59.235 5007-5035/com.example.retrofitdemo D/OkHttp:{"nameValuePairs":{"id":"1","name":"chandru","type":"user"}}
但是上述方法仅在logcat中返回响应主体,我无法将其作为String
或JSONObject
来获取.即使我可以使用HttpLoggingInterceptor
获取响应正文,即使在应用程序进入生产环境后,我的请求正文仍将始终在标签中显示为"OkHttp"(因此,这主要是因为消除logcat中的发布数据.
But the above method returns only response body in the logcat, I am not able to get it as either String
or JSONObject
. Eventhough if I could able to get the response body using HttpLoggingInterceptor
, my request body will be shown in the Logcat with the tag "OkHttp" all the time even after the application goes into the production (So primarily this leads like a kind of relieving the post data in the logcat).
我的要求:
我需要获取请求正文为String
或JSONObject
或其他任何方法,而无需修改Logcat中的发布数据.
I need to get the request body as String
or JSONObject
or whatever method without reviling the post data in the Logcat.
我尝试过的事情:
即使在onResponse
之后,我也尝试从Response<T> response
获取请求正文,但是我无法完成请求.请找到我用于此目的的代码,如下所示:
I tried to fetch the request body even after onResponse
from Response<T> response
, but though I couldn't able to get it done possible. Please find the code that I am using for this purpose as follows:
Gson gson = new Gson();
String responseString = gson.toJson(response.raw().request().body());
注意:上面使用gson.toJson
方法转换的请求正文仅返回元数据,而不返回请求发布数据.
Note: The above converted request body using gson.toJson
method returns only the meta data not the request post data.
请通过提供您的宝贵提示和解决方案来帮助我.我不知道该怎么做.在过去的两天里,我完全坚持了这一点.如果我的问题太冗长,请原谅.欢迎你提出任何建议.如果我的要求不清楚,请告诉我.预先感谢.
Kindly help me with this by providing your valuable tips and solutions. I have no idea how to do this. I am completely stuck up with this for the past two days. Please forgive if my question is too lengthy. Your comments are always welcome. Do let me know if my requirement is not clear. Thanks in advance.
推荐答案
通过此链接,我可以正常工作 Retrofit2:在OkHttp Interceptor中修改请求正文
I have got it working from this link Retrofit2: Modifying request body in OkHttp Interceptor
private String bodyToString(final RequestBody request) {
try {
final RequestBody copy = request;
final Buffer buffer = new Buffer();
if (copy != null)
copy.writeTo(buffer);
else
return "";
return buffer.readUtf8();
} catch (final IOException e) {
return "did not work";
}
}
我正在使用的改装依赖项
Retrofit dependencies i am using are
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'
compile 'com.squareup.okhttp3:okhttp:3.0.0-RC1'
compile 'com.squareup.okhttp3:logging-interceptor:3.0.0-RC1'
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3'
这篇关于使用Retrofit 2.0 POST方法获取请求正文内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!