2016-09-29 5 views
0

Ich benutze Retrofit zu @POST ein neues Benutzerobjekt zu meinem Server. Der Benutzername ist ein eindeutiger Schlüssel in der Datenbanktabelle. Wenn ich einen asynchronen Aufruf mit einem eindeutigen Benutzernamen ausführe, wird der Eintrag der Benutzertabelle hinzugefügt. Die Antwort ist erfolgreich.Retrofit - zu wissen, wenn der POST nicht erfolgreich ist

Wenn ich jedoch versuche, den Aufruf für einen Benutzer mit einem vorhandenen Benutzernamen auszuführen, wird der Eintrag nicht zur Datenbanktabelle hinzugefügt (wie erwartet) ABER die Antwort ist erfolgreich. In allen Fällen bekomme ich eine erfolgreiche Antwort.

Wie kann ich den erfolgreichen Vorgang bestätigen? Wenn die Create/Update/Delete-Aufrufe erfolgreich in der Datenbank widergespiegelt werden?

Endpunkt:

@POST("user") 
Call<User> saveUser(@Body User m); 

Beispielaufruf:

call.enqueue(new Callback<User>() { 
      @Override 
      public void onResponse(Call<User> call, Response<User> response) { 

       try { 
        if(response.isSuccessful()) { 

         Log.i(Constants.LOG, response.raw().toString()); 
        } 
       } catch (Exception e) { 
        Log.e(Constants.LOG, e.toString()); 
       } 
      } 

Die rohe Antwortausgabe in allen Szenarien:

Response{protocol=http/1.1, code=200, message=OK, url=http://myapi.com/user} 
+0

Jeder Zeit geben Sie Ihren Server Statuscode 200 zurück? –

+0

Sie erhalten 200 als Statuscode jedes Mal, wenn es Ihnen gelingt, den Webdienst zu starten, obwohl Ihre beabsichtigte Arbeit erledigt wurde oder nicht. Ich würde vorschlagen, dass Sie Protokolle in Ihren Server-Code einfügen und sehen, wo die Dinge brechen, behandeln Sie Ihre Ausnahmen und geben Sie eine angemessene Antwort für den Client, so würden Sie es scheitern oder nicht. –

+0

Ok, aber wie überprüfe ich, ob der Vorgang erfolgreich war? In meiner Ruhe-App kann ich eine erfolgreiche/nicht erfolgreiche Nachricht zurückgeben, wenn ich Postman verwende, um meine Anrufe zu testen. Wie kann ich eine solche Nachricht mit Retrofit zurücksenden? – Santiago

Antwort

0

ok so habe ich endlich herausgefunden, wie diese zu lösen. In meiner Ruhe api musste ich die status nennen und die benutzerdefinierte code senden:

res.status(300).send({ error: 'Something went wrong' }); 

Im Falle der Zugabe eines doppelten Benutzer, ist die Antwort nicht erfolgreich und ich erhalte die Rohausgangssignal:

Response{protocol=http/1.1, code=300, message=Internal Server Error, url=http:///myapi.com/user} 
Verwandte Themen