2017-02-03 3 views
0

Lassen Sie uns sagen, ich habe eine REST API, die ich Liste von Büchern erhalten könnte, indem Sie folgende Nachrüstung 2 Anfrage aufrufen.richtiger Weg, um dynamische Antworten durch Nachrüstung zu behandeln 2

public interface AllRecordsFromRequestInterface { 
    @GET("books/all") 
    Call<List<TrackInfo>> operation(@Header("Authorization") String authentication_token); 
} 

und API-Antwort:

[ 
    { 
    "id": "1", 
    "title": "The Catcher in the Rye", 
    "author":"J. D. Salinger" 
    }, 
    { 
    "id": "2", 
    "title": "The Great Gatsby", 
    "author":"F. Scott Fitzgerald" 
    } 
] 

Ich benutze GsonConverterFactory json zu einem Modell zu konvertieren. Hier ist meine Modellklasse

Ich benutze ein Authentifizierungstoken, um mich selbst zu API zu autorisieren, wie es in meiner Anfrage zu sehen ist. manchmal wird eine andere Antwort empfangen als eine Antwort wegen Token-Ablauf oder etwas anderem. zum Beispiel:

{ 
    "status": "error", 
    "message": "Expired token" 
} 

Was ist der richtige Weg, um dynamische Reaktionen (mit bekannter Struktur) in Retrofit 2 zu behandeln?

+1

Wenn Ihr Token abgelaufen ist, sollte die API Ihnen einen Fehlercode 401 zurückgeben. Und Sie können von dort gehen. Wenn es 200 und einige Fehler Payload zurückgibt, dann ist es falsch api entworfen. –

Antwort

2

haben Sie mehrere Möglichkeiten:

1-ändern Sie Ihre API: (dieser Standard ist)

ändert es so für jede Antwort und wenn der Benutzer mit Authentifizierung verläßt das Ergebnis null oder wenn die Authentifizierung fehlgeschlagen war erfolgreich, legte die Liste in das Ergebnis.

{ 
"status" : "error/success" 
"message" : ... 
"result" : .... 
} 

2- können Sie Objekttyp nachzurüsten geben und nach der Reaktion erfolgreich war können Sie es zu einem Ihrer Modelle werfen, „Instanz“ Syntax.

public interface AllRecordsFromRequestInterface { 
@GET("books/all") 
Call<Object> operation(@Header("Authorization") String authentication_token); 
} 
Verwandte Themen