Når jeg sender en forespørsel, får jeg et svar i XML, men det jeg trenger er JSON. I dokumentasjonen står det for å få JSON i retur: Bruk HTTP-headeren Accept: application/json
.
Hvor finner jeg HTTP-headeren jeg skal sette Accept: application/json
i?
Jeg antar at den ikke skal være inne i URL-forespørselen, som ser ut som:
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
Du gjettet riktig, HTTP Headers er ikke en del av URL-en.
Og når du skriver inn en URL i nettleseren, blir forespørselen sendt med standardhoder. REST Apis er uansett ikke ment å brukes ved å skrive inn endepunktet i adressefeltet i en nettleser.
Det vanligste scenariet er at serveren din bruker en tredjeparts REST Api.
For å gjøre det, forfalsker koden på serversiden en skikkelig GET (/PUT/POST/DELETE)-forespørsel som peker til et gitt endepunkt (URL), angir (ved behov, som i ditt tilfelle) noen hoder og sender til slutt (kanskje) noen data (som vanligvis skjer i en POST-forespørsel, for eksempel).
Koden for å forfalske forespørselen, sende den og til slutt få svaret tilbake, avhenger av språket på serversiden.
Hvis du vil teste et REST Api, kan du bruke verktøyet `curl
fra kommandolinjen.
curl
sender en forespørsel og sender svaret til stdout (med mindre annet er angitt).
I ditt tilfelle vil testforespørselen bli sendt ut på denne måten:
$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'
H
- eller --header
-direktivet angir en header og dens verdi.
Her er et praktisk nettsted for å teste ut topptekstene dine. Du kan se nettleserens headers og også bruke cURL til å reflektere tilbake de headers du sender.
Du kan for eksempel validere innholdsforhandlingen slik.
Denne Accept
-headeren foretrekker ren tekst, så den returneres i det formatet
$ curl -H "Accept: application/json;q=0.9,text/plain" http://gethttp.info/Accept
application/json;q=0.9,text/plain
Mens denne foretrekker JSON og returnerer i det formatet:- {{{156435}}}.
$ curl -H "Accept: application/json,text/*;q=0.99" http://gethttp.info/Accept
{
"Accept": "application/json,text/*;q=0.99"
}
Vel, Curl kan være et bedre alternativ for json-representasjon, men i så fall vil det være vanskelig å forstå strukturen til json fordi det er på kommandolinjen. hvis du ønsker å få json i nettleseren, fjerner du ganske enkelt alle XML-kommentarene, for eksempel -.
@XmlRootElement(name="person")
@XmlAccessorType(XmlAccessType.NONE)
@XmlAttribute
@XmlElement
fra modellklassen, og deretter kjører du den samme nettadressen som du har brukt til xml-representasjonen.
Sørg for at du har jacson-databind-avhengighet i pom.xml.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.1</version>
</dependency>