Próbuję zaimplementować przechwytywania (OkHttp 3,2 & modernizacyjny 2) edycji odpowiedź JSON, zanim jest zwracany jako odpowiedź. Serwer, którego żądamy, zwraca różne dane zależne od sukcesu lub błędu, co utrudnia mapowanie obiektów.Android Modernizacja 2, różnice między addInterceptor & addNetworkInterceptor o odpowiedziach edycji
Próbowałem to zrobić, dodając przechwytywacz do Retrofit jako NetworkInterceptor, jednak zwracany ciąg nie miał formatu.
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
try {
final String responseString = new String(response.body().bytes());
LOGD("OkHttp-NET-Interceptor", "Response: " + responseString);
String newResponseString = editResponse(responseString);
LOGD("OkHttp-NET-Interceptor", "Response edited: " + newResponseString);
return response.newBuilder()
.body(ResponseBody.create(response.body().contentType(), newResponseString))
.build();
}catch (Exception ex){
return response;
}
}
responseString miał ciąg bez dowolnym formacie zrozumiałym.
Po przejściu na normalny przechwytujący, ciąg miał format a był w stanie przekonwertować do JSONObject.
Czy mogę powiedzieć mi, kim są różnice między odpowiedzi?
dlaczego ta linia nowy ciąg (response.body(). Bajty()); zwraca inną treść?
Dziękuję za wyjaśnienia, daje mi to pojęcie o tym, co robi każdy przechwytujący. Dlaczego jednak NetworkInterceptor nie zwraca czytelnego ciągu znaków i normalnego przechwytywacza? –
@Lechon Dodałem więcej do mojej odpowiedzi, aby spróbować wyjaśnić więcej – roarster