2017-03-02 2 views
0

Wenn Ihr Server die Anfrage versteht und den angeforderten Datenclient zurücksenden möchte, senden Sie eine 200. Wenn Ihr Server die Anfrage versteht, senden Sie die vom Client angeforderten Daten jedoch nicht zurück Senden Sie eine 422. Und genau so funktioniert meine JSON API. Wenn ein Modell gespeichert wird, senden I 200. Wenn die Modellvalidierung Fehler enthält, sende ich 422:Mit Statuscodes für JSON-APIs arbeiten

respond_to do |format| 
     if @user.persisted? 
     format.json do 
      render json: { id: @user.id }, status: 200 
     end 
     else 
     format.json do 
      render json: { error: @user.errors.full_messages }, status: 422 
     end 
     end 
    end 

Leider, wenn ich eine 422 bis Android senden, HttpURLConnection eine Ausnahme auslöst, wenn man versucht den Eingangsstrom zuzugreifen:

W/System.err: java.io.FileNotFoundException: http://10.0.2.2:3001/users/auth/facebook/callback.json 

Jetzt, wenn ich 422 zu 200 in meiner JSON API ändern, dann wird keine Ausnahme ausgelöst und ich kann die Daten analysieren.

Aber die Antwort sollte nicht 200 sein, weil es ein Problem beim Speichern der Daten gab. Was muss ein Android-Entwickler tun?

+0

??? Also 422 bekommst du einen Fehler und 200 bekommst du keinen Fehler und du sagst die Antwort SOLLTE nicht 200 sein, oder? Also was brauchst du, 422 oder 200 und Fehler oder kein Fehler? – user7568042

+0

@ user7568042 Ich habe es bereits in meiner Frage erklärt: Wenn das Modell nicht gespeichert wird, möchte ich 422 zurücksenden. Wenn ich jedoch 422 an Android sende, löst es eine Ausnahme aus und erlaubt mir nicht, die Fehlermeldung JSON zu verarbeiten Antwort mit dem 422 Statuscode. – Donato

Antwort

0

Wenn Sie einen nicht erfolgreichen Antwortcode erhalten, lesen Sie den Fehlerdatenstrom.

HttpURLConnection httpConn = (HttpURLConnection)_urlConnection; 
InputStream _is; 
if (httpConn.getResponseCode() >= 400) { 
    _is = httpConn.getInputStream(); 
} else { 
    /* error from server */ 
    _is = httpConn.getErrorStream(); 
} 

Hier ist der Fehler, wie WNF geschlossen: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4513568

Die Tatsache, dass es FNFE für eine 422-Antwort ist werfen ernsthaft durcheinander ist. Wenn Sie die Quelle für HttpURLConnection betrachten, definiert es nicht einmal 422.

+0

Ja, dass Datei nicht gefunden Fehler warf mich aus großer Zeit. Ich hatte keine Ahnung, worüber es sprach. – Donato

+0

Ich wäre neugierig zu sehen, was es für andere gut bekannte 4xx Codes wirft ... –

Verwandte Themen