2017-04-26 1 views
0

Using Spring's RestTemplate.exchange (URL, HTTP.GET, String.class) Signatur, um mit Hilfe einer URL- und GET-HTTP-Methode auf eine Ressource zuzugreifen, wie können wir unterscheiden, ob der Server, der die Ressource hostet (dargestellt durch URL), inaktiv ist oder ob der Server die Ressource nicht finden konnte und daher den HttpStatus-Code 404 zurückliefert.Wie unterscheidet man, ob der Server, der eine Ressource (in URL) hostet oder nicht existiert, wenn ein HttpStatus-Code von 404 zurückgegeben wird

Ich würde gerne durch Wiederholungsmechanismus auf diesen Unterschied basieren, würde ich nicht versuchen, erneut zu versuchen, wenn die Ressource nicht existiert. Aber ich würde es nach einem konfigurierbaren Back-Off-Zeitraum versuchen, in der Hoffnung, dass der Server aufsteht, wenn der Server ausgefallen ist.

Ich habe Httpstatus-Klasse im Frühjahr Quelle bezeichnet und fand Verweis auf eine URL - http://tools.ietf.org/html/rfc7231#section-6.5.5

6.5.4. 404 Nicht gefunden Der 404-Statuscode (Nicht gefunden) zeigt an, dass der Ursprungsserver keine aktuelle Repräsentation für die Zielressource gefunden hat oder bereit ist, anzugeben, dass eine solche existiert. Ein 404-Statuscode gibt nicht an, ob dieser Mangel an Vertretung vorübergehend ist oder permanent; der Statuscode 410 (Gone) wird gegenüber 404 bevorzugt, wenn der Ursprungsserver , vermutlich über einige konfigurierbare Mittel, weiß, dass die Bedingung wahrscheinlich dauerhaft ist. Eine 404-Antwort kann standardmäßig zwischengespeichert werden. d. h., sofern nicht anders durch die Methodendefinition oder die expliziten Cache-Steuerelemente angezeigt wird (siehe Abschnitt 4.2.2 von [RFC7234]).

Ich habe gelesen: (Is 404 the right return code for a resource that currently doesn't exist?) und (What to return when a route/url is found but not the resource behind it?). Aber ich konnte keinen Artikel finden, der mir helfen würde, die beiden Szenarien zu unterscheiden.

Die Behandlung der HttpClientErrorException und der Blick auf das ResponseBody-Feld könnte eine mögliche Lösung sein, aber ich fühlte, dass es möglicherweise nicht der richtige Weg ist, es zu tun.

+0

Es sollte etwas in den Antwortheadern sein – user2793390

+0

Sie sind richtig, Herr, so ist Michael Peacock. Der ausgefallene Server wird auf der Clientseite als E/A-Fehler behandelt und ResourceAccessException wird von RestTemplate ausgelöst. ResourceAccessException - Server ist ausgefallen. HttpStatusCodeException - wenn der Server aktiv ist und ein Statuscode zurückgegeben wird. Vielen Dank. –

Antwort

2

Der HTTP 404-Status ist eine gültige Antwort, die nur von einem aktiven Server zurückgegeben werden kann, wenn die angeforderte Ressource nicht gefunden werden kann. Wenn der Server jedoch inaktiv ist, wird Ihre Verbindung abgelehnt.

0

Der ausgefallene Server wird auf der Clientseite als E/A-Fehler behandelt und ResourceAccessException wird von RestTemplate ausgelöst.

ResourceAccessException - Server ist inaktiv.

HttpStatusCodeException - wenn der Server aktiv ist und ein Statuscode zurückgegeben wird (4xx -series löst die Unterklassenausnahme HttpClientErrorException aus, löst 5xx-series die Unterklassenausnahme HttpServerErrorException aus).

Verwandte Themen