2016-04-01 3 views
0

Wenn ich eine Ruheanforderung mache und der Server eine Anwendungsausnahme wie IllegalArgumentException auslöst, erhalte ich eine Antwort mit http Status 404.Was ist die erwartete Antwort, wenn der Server Anwendungsfehler wie IllegalArgrumentException auslöst?

Wäre keine Antwort mit http Status 500 besser sein?

Oder was wäre eigentlich die erwartete Antwort, wenn eine Anwendungsausnahme ausgelöst wird? Gibt es ein Standardverhalten in Resteasy, Frühling oder Tomcat selbst?

Ich weiß, dass ich einen ExceptionMapper für resesteasy verwenden kann, aber ist das wirklich Best Practice oder gibt es eine bessere Alternative?

Ich verwende folgende Konfiguration:

  • Frühling
  • Resteasy
  • tomcat 7

aktualisieren:

Das Problem, das ich mit Blick auf bin ist, dass ich Haben Sie 2 Web-Anwendungen, eine gibt HTTP-Status 500 und die andere i S gibt den HTTP-Status 400 zurück, wenn eine IllegalArgumentException ausgelöst wird. Ich kann nicht herausfinden, warum sie sich anders verhalten. Es scheint mir, dass beide Web-Anwendungen die gleiche Feder- und Resteasy-Konfiguration haben.

Wenn ich debuggen, sehe ich, dass Resteasy die IllegalArgumentException in eine org.jboss.resteasy.spi.UnhandledException umwandelt, aber die Antwort bzw. der Antwortstatuscode wird nicht berührt.

Abgesehen davon nicht zu wissen, welcher http-Status-Code wäre der erwartete (400, wie Jon Skeet und Stefano Cazzola bereits darauf hingewiesen), wusste ich auch nicht, warum die 2 Web-Anwendungen anders verhalten.

Ich konnte keinen Resteasy ExceptionMapper in beiden Web-Anwendung finden. Gibt es ein Standardverhalten in resesteasy, spring oder tomcat, das eine IllegalArgumentException auf http-Status 404 oder http-Status 500 abbildet? Oder wie kann das passieren?

+3

Wenn es für eine Illegal ist, ist, dass aufgrund der Anforderung ungültig zu sein? Wenn ja, wäre 400 die richtige Antwort. –

+0

Ja, tatsächlich ist es aufgrund der ungültigen Anfrage, weil einige Validierung fehlschlägt. Also, was wäre der beste Weg, um diese Ausnahme anstelle von 404 bis 400 abzubilden? – sfrutig

+0

Ich weiß nichts von dieser Seite - ich habe keine der Technologien, die Sie erwähnt haben, schon lange benutzt. –

Antwort

1

Der Antwortcode ist mit dem Fehler im Server korreliert. Wenn sich der Fehler auf eine ungültige Eingabe bezieht, die vom Client empfangen wird, lautet der formal korrekte Antwortstatus 400 (ungültige Anforderung). Der Unterschied zu 500 ist, dass die Rückgabe von 400 das korrekte Verhalten für den Server ist: bedeutet, der Server wurde ordnungsgemäß verarbeitet und antwortete mit einem Fehler, weil die Anfrage falsch war. Wenn dieselbe Anfrage jemals erneut gesendet wird, wird dieselbe Fehlerantwort angezeigt. Der Server soll diesen Fehler nicht korrigieren, es liegt beim Client.

Sie this link als Referenz nehmen

+0

Ok, danke. Ich möchte auch wissen, warum ich http Status 404 oder http Status 500 bekomme. Siehe meine aktualisierte Frage. – sfrutig

Verwandte Themen