REST API - 使用“Accept:application / json”HTTP标头

时间:2017-04-04 14:20:18

标签: json rest request-headers

当我发出请求时,我得到了一个XML响应,但我需要的是JSON。在文档中,为了获得JSON而声明:使用Accept: application/json HTTP标头。

我在哪里可以找到将Accept: application/json放入其中的HTTP标头?

我的猜测是,不应该在URL请求中,它看起来像:

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

4 个答案:

答案 0 :(得分:39)

您猜对了,HTTP标头不是网址的一部分。

当您在浏览器中键入URL时,将发出带有标准标头的请求。无论如何,不​​打算通过在浏览器的地址栏中键入端点来使用REST Apis。

最常见的情况是您的服务器消耗第三方REST Api。

为此,您的服务器端代码伪造指向给定端点(URL)设置的适当GET(/ PUT / POST / DELETE)请求(在需要时,如您的情况)一些< strong> headers ,最后(也许)发送一些数据(例如,通常在POST请求中发生)。

伪造请求,发送请求并最终获得响应的代码取决于您的服务器端语言。

如果您想测试 REST Api,可以从命令行使用 curl 工具。

curl发出请求并将响应输出到stdout(除非另有说明)。

在您的情况下,测试请求将按如下方式发出:

$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--header指令设置标题及其值。

答案 1 :(得分:0)

这是test out your headers的便捷站点。您不仅可以查看浏览器标题,还可以使用cURL反射回您发送的所有标题。

例如,您可以像这样验证内容协商。

Accept标头更喜欢纯文本,因此以该格式返回:-

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

此人更喜欢JSON,因此以该格式返回:-

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

答案 2 :(得分:0)

基本上,我使用Fiddler或Postman来测试API。

在提琴手中,您需要在请求标头中指定而不是xml,而将html更改为json。 例如:Accept: application/json。那应该做的。

答案 3 :(得分:-2)

Well Curl可能是json表示的更好选择,但在这种情况下,因为它在命令行中很难理解json的结构。 如果你想在浏览器上获取你的json,你只需删除所有 XML注释,如 -

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

从您的模型类中运行相同的url,您已经用于xml表示。

确保你的pom.xml中有jacson-databind依赖

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.4.1</version>
</dependency>