API REST - Utilice el encabezado HTTP "Accept: application/json".

Cuando hago una petición, obtengo una respuesta en XML, pero lo que necesito es JSON. En el documento se indica que para obtener un JSON a cambio: Utilizar el encabezado HTTP Accept: application/json.

¿Dónde puedo encontrar el encabezado HTTP para poner Accept: application/json dentro?

Supongo que no se supone que esté dentro de la solicitud de URL, que parece:

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
Solución

Adivinó, los encabezados HTTP no son parte de la URL.

Y cuando escribas una URL en el navegador la petición se emitirá con cabeceras estándar. De todos modos las Apis REST no están pensadas para ser consumidas escribiendo el punto final en la barra de direcciones de un navegador.

El escenario más común es que su servidor consuma una Api REST de terceros.

Para ello, su código del lado del servidor forja una solicitud GET (/PUT/POST/DELETE) adecuada que apunte a un punto final determinado (URL) estableciendo (cuando sea necesario, como en su caso) algunas cabeceras y, finalmente, (tal vez) enviando algunos datos (como ocurre típicamente en una solicitud POST, por ejemplo).

El código para falsificar la solicitud, enviarla y finalmente obtener la respuesta depende de su lenguaje del lado del servidor.

Si quieres probar una Api REST puedes utilizar la herramienta curl desde la línea de comandos.

curl hace una solicitud y la salida de la respuesta a stdout (a menos que se indique lo contrario).

En tu caso la petición de prueba se emitiría así:

$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'

La directiva H o --header establece una cabecera y su valor.

Comentarios (1)

Aquí'hay un sitio práctico para probar sus cabeceras. Puedes ver las cabeceras de tu navegador y también usar cURL para reflejar las cabeceras que envíes.

Por ejemplo, puede validar la negociación del contenido así.

Esta cabecera Accept prefiere texto plano así que devuelve en ese formato:-

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

Mientras que este prefiere JSON y por lo tanto devuelve en ese formato:-

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

Bueno, Curl podría ser una mejor opción para la representación de json, pero en ese caso sería difícil de entender la estructura de json porque su en la línea de comandos. si quieres obtener tu json en el navegador simplemente elimina todas las Anotaciones XML como -

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

de su clase de modelo y de ejecutar la misma url, que ha utilizado para la representación xml.

Asegúrate de que tienes la dependencia de jacson-databind en tu pom.xml


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