REST API - Verwenden Sie den "Accept: application/json" HTTP Header

Wenn ich eine Anfrage stelle, erhalte ich eine Antwort in XML, aber was ich brauche, ist JSON. In der Dokumentation steht, dass man JSON als Antwort erhält: Verwenden Sie den Accept: application/json HTTP Header.

Wo finde ich den HTTP-Header, in den ich Accept: application/json einfügen kann?

Ich vermute, dass er nicht in der URL-Anfrage enthalten sein sollte, die wie folgt aussieht:

http://localhost:8080/otp/routers/default/plan?fromPlace=52.5895,13.2836&toPlace=52.5461,13.3588&date=2017/04/04&time=12:00:00
Lösung

Sie haben richtig vermutet: HTTP-Header sind nicht Teil der URL.

Und wenn Sie eine URL in den Browser eingeben, wird die Anfrage mit Standard-Headern ausgegeben. Außerdem sind REST-Apis nicht dafür gedacht, durch Eingabe des Endpunkts in die Adressleiste eines Browsers konsumiert zu werden.

Das häufigste Szenario ist, dass Ihr Server eine REST-Api eines Drittanbieters konsumiert.

Dazu schmiedet Ihr serverseitiger Code eine korrekte GET (/PUT/POST/DELETE)-Anfrage, die auf einen bestimmten Endpunkt (URL) verweist, setzt (bei Bedarf, wie in Ihrem Fall) einige Kopfzeilen und sendet schließlich (vielleicht) einige Daten (wie es beispielsweise bei einer POST-Anfrage der Fall ist).

Der Code, um die Anfrage zu fälschen, sie zu senden und schließlich die Antwort zurückzubekommen, hängt von Ihrer serverseitigen Sprache ab.

Wenn Sie eine REST-Api testen wollen, können Sie das Tool curl von der Kommandozeile aus verwenden.

curl stellt eine Anfrage und gibt die Antwort auf stdout aus (sofern nicht anders angegeben).

In Ihrem Fall würde die Testanfrage wie folgt aussehen:

$curl -H "Accept: application/json" 'http://localhost:8080/otp/routers/default/plan?fromPlace=52.5895,13.2836&toPlace=52.5461,13.3588&date=2017/04/04&time=12:00:00'

Die H oder --header Direktive setzt einen Header und seinen Wert.

Kommentare (1)

Hier's eine praktische Seite, um Ihre Header zu testen. Sie können die Kopfzeilen Ihres Browsers sehen und auch cURL verwenden, um die von Ihnen gesendeten Kopfzeilen zurückzugeben.

So können Sie zum Beispiel die Inhaltsverhandlung validieren.

Dieser Accept-Header bevorzugt reinen Text und gibt ihn in diesem Format zurück:-

$ curl -H "Accept: application/json;q=0.9,text/plain" http://gethttp.info/Accept
application/json;q=0.9,text/plain

Dieser hingegen bevorzugt JSON und gibt daher in diesem Format zurück:-

$ curl -H "Accept: application/json,text/*;q=0.99" http://gethttp.info/Accept
{
   "Accept": "application/json,text/*;q=0.99"
}
Kommentare (0)

Nun Curl könnte eine bessere Option für json Darstellung sein, aber in diesem Fall wäre es schwierig, die Struktur von json zu verstehen, weil seine in der Befehlszeile. Wenn Sie Ihr json im Browser anzeigen lassen wollen, entfernen Sie einfach alle XML-Annotationen wie -

@XmlRootElement(name="person")
@XmlAccessorType(XmlAccessType.NONE)
@XmlAttribute
@XmlElement

aus Ihrer Modellklasse und führen Sie dann die gleiche URL aus, die Sie für die XML-Darstellung verwendet haben.

Stellen Sie sicher, dass Sie jacson-databind-Abhängigkeit in Ihrer pom.xml haben


  com.fasterxml.jackson.core
  jackson-databind
  2.4.1
Kommentare (1)