2015-12-07 16 views
11

Sto utilizzando Retrofit per effettuare una richiesta POST nel mio server web.Retrofit 2 - Nucleo di risposta nullo quando lo stato di risposta è 422 (entità non elaborabile)

Tuttavia, non riesco a ottenere il corpo della risposta quando lo stato della risposta è 422 (unprocessable entity). Il corpo della risposta è sempre null.

Voglio sapere se sto facendo qualcosa di sbagliato o se c'è una soluzione per questo. Perché sto usando lo stesso json nella richiesta con Postman e restituisce il corpo normalmente.

Questo è il metodo:

@Headers("Content-Type: application/vnd.api+json") 
@POST("my_endpoint") 
Call<JsonObject> postEntry(@Header("Authorization") String authorization, @Body JsonObject json); 

Il corpo è una JsonObject, non sto serializzazione come la documentazione dicono. Ma non penso che questo sia il problema.

Qualsiasi aiuto è apprezzato, grazie.

+0

è il vostro api tornando qualche corpo a '422' errori ?. Hai mappato in Android? –

+0

@DeividiCavarzan Sì, come ho detto nella domanda, quando uso Postman per fare la richiesta, restituisce il corpo perfettamente. Sto usando lo stesso oggetto JSON in entrambi i posti. –

+0

@DeividiCavarzan E sulla mappatura, sì, l'ho fatto. Effettua effettivamente la risposta "onResponse (Risposta , Retrofit retrofit)" in Callback con 'response.body() == null'. –

risposta

9

Per impostazione predefinita, quando il server restituisce un codice di errore response.body() è sempre null. Quello che stai cercando è response.errorBody(). Un approccio comune sarebbe qualcosa di simile:

@Override 
    public void onResponse(Response<JsonObject> response, Retrofit retrofit) 
    { 
     if (response.isSuccess()) 
     { 
      response.body(); // do something with that 
     } 
     else 
     { 
      response.errorBody(); // do something with that 
     } 
    } 

Se avete bisogno di qualcosa di veramente avanzato dare un'occhiata a Interceptors e how to use them

+1

Grazie .. ma il mio errorBody() è sempre nullo .. Sono riuscito a farlo funzionare senza retrofit. Ti sto assegnando la taglia perché sta per scadere –

+0

Ty. Tramite l'intercettore è possibile esaminare cosa sta succedendo sotto il cofano e vedere la richiesta e la risposta non elaborate. Ad ogni modo sono felice che tu abbia trovato un modo :) – tochkov

Problemi correlati