我需要获得一个请求体,并在进行排队操作之前对Retrofit 2.0执行一些逻辑操作.但不幸的是,我无法从我的服务电话中获取帖子内容.目前搜索很多,我发现只有一个解决方案,如使用HttpLoggingInterceptor和OkHttpClient登录使用Retrofit 2.0从
this method发布的请求.我正在使用以下代码在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获取响应体,我的请求主体将在应用程序进入生产之后始终显示在Logcat中,标签为“OkHttp”(所以主要是这样一种缓解在logcat中发布数据).
我的要求:
我需要获取请求正文为String或JSONObject或任何方法,而不会修改Logcat中的post数据.
我试过的
即使在Response< T>的onResponse之后,我也试图获取请求主体回应,但尽管我无法做到这一点.请查看我为此目的使用的代码如下:
Gson gson = new Gson(); String responseString = gson.toJson(response.raw().request().body());
注意:上述转换的请求体使用gson.toJson方法仅返回元数据而不是请求发布数据.
请通过提供宝贵的技巧和解决方案帮助我.我不知道该怎么做过去两天我完全陷入僵局.如果我的问题太冗长,请原谅您的意见总是受到欢迎.如果我的要求不明确,请告诉我提前致谢.
解决方法
我已经从这个链接工作了
Retrofit2: Modifying request body in OkHttp Interceptor
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"; } }
我正在使用的改装依赖
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'