REST API - Use o "Aceitar: aplicação/json" HTTP Header

Quando eu faço um pedido, recebo uma resposta em XML, mas o que eu preciso é do JSON. No documento é indicado a fim de obter um JSON em troca: Utilize o cabeçalho HTTP Accept: application/json.

Onde eu encontro o cabeçalho HTTP para colocar Accept: application/json dentro?

O meu palpite é que não é suposto estar dentro do pedido de URL, o 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
Solução

Você adivinhou certo, os cabeçalhos HTTP não fazem parte do URL.

E quando você digitar um URL no navegador, o pedido será emitido com cabeçalhos padrão. De qualquer forma, REST Apis não devem ser consumidos ao digitar o endpoint na barra de endereço de um navegador.

O cenário mais comum é que o seu servidor consome um REST Api de terceiros.

Para isso, o seu código do lado do servidor forge uma solicitação GET (/PUT/POST/DELETE) apontando para uma determinada configuração de endpoint (URL) (quando necessário, como o seu caso) alguns cabeçalhos e finalmente (talvez) o envio de alguns dados (como normalmente ocorre em uma solicitação POST, por exemplo).

O código para forjar o pedido, enviá-lo e finalmente obter a resposta depende do idioma do seu servidor.

Se você quiser teste uma Api REST você pode utilizar curl a partir da linha de comando.

O "Curl" faz uma requisição e dá a resposta ao stdout (a menos que instruído de outra forma).

No seu caso, o pedido de teste seria emitido desta forma:

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

A diretiva H' ou--header' define um cabeçalho e seu valor.

Comentários (1)

Aqui'é um site útil para testar os seus cabeçalhos. Você pode ver os cabeçalhos do seu navegador e também usar cURL para refletir de volta os cabeçalhos que você enviar.

Por exemplo, você pode validar a negociação do conteúdo desta forma.

Este cabeçalho `Accept' prefere texto simples, portanto retorna nesse formato:-

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

Considerando que este prefere JSON e assim retorna nesse formato:-

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

Bem, Curl poderia ser uma opção melhor para a representação json, mas nesse caso seria difícil entender a estrutura do json porque está na linha de comando. Se você quiser colocar seu json no navegador, simplesmente remova todas as XML Annotações como -

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

da sua classe de modelo e do que executar a mesma url, você tem usado para a representação xml.

Certifique-se de que você tem dependência de jacson-databind no seu pom.xml


  com.fasterxml.jackson.core
  jackson-databind
  2.4.1
Comentários (1)