Получение содержимого тела запроса с помощью метода Retrofit 2.0 POST
у меня есть требование получить тело запроса и выполнить некоторые логические операции с Retrofit 2.0 перед выполнением enque
операции. Но, к сожалению, я не могу получить содержимое тела сообщения из моего служебного вызова. В настоящее время после поиска много, я нашел только одно решение, как logging
на request
что я публикую с помощью Retrofit 2.0 от этот метод С помощью HttpLoggingInterceptor
С OkHttpClient
. Я использую следующий код для регистрации тела запроса в 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
. Eventhough, если бы я мог получить тело ответа, используя HttpLoggingInterceptor
, мое тело запроса будет показано в Logcat с тегом " OkHttp" все время даже после того, как приложение переходит в производство (так что в первую очередь это приводит к своего рода облегчению данных post в logcat).
Мои Требования:
мне нужно получить тело запроса как String
или JSONObject
или любой другой метод, не ругая данные post в Logcat.
что я пробовал:
я попытался получить тело запроса даже после onResponse
С Response<T> response
, но я не смог сделать это возможным. Пожалуйста, найдите код, который я использую для этой цели следующим образом:
Gson gson = new Gson();
String responseString = gson.toJson(response.raw().request().body());
Примечание: выше преобразованное тело запроса с помощью gson.toJson
метод возвращает только метаданные, а не данные post запроса.
добросердечно помогите мне с этим путем обеспечивать ваши ценные подсказки и решения. Я понятия не имею, как это делать. Я полностью застрял с этим в течение последних двух дней. Пожалуйста, простите, если мой вопрос слишком длинный. Ваш комментарии всегда приветствуются. Дайте мне знать, если мое требование не понятно. Спасибо заранее.
2 ответов
Я получил его работу по этой ссылке Retrofit2: изменение тела запроса в перехватчике OkHttp
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'
у меня тоже была аналогичная проблема, я установил JSON как @Body type в retrofit, поэтому namevaluepair появляется перед необработанным телом, и его можно увидеть внутри перехватчика. Даже если мы регистрируем / отлаживаем jsonObject.toString мы видим запрос как правильный без представленного namevaluepair.
что я сделал было создание
Call<ResponseBody> getResults(@Body JsonObject variable);
и при вызове метода я преобразовал JSONObject в JsonObject с помощью
new JsonParser().parse(model).getAsJsonObject();