REST API - 使用"Accept: application/json" HTTP头部

68

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

我在哪里可以找到HTTP头将 Accept: application/json 放在里面?

我的猜测是它不应该放在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

2
你是如何发送请求的? - Joe Clay
这可以帮助您理解:http://stackoverflow.com/documentation/rest/1664/getting-started-with-rest/20145/rest-over-http - sp00m
5个回答

111

你猜对了,HTTP头部不是URL的一部分。

当你在浏览器中输入URL时,请求将使用标准头部发出。无论如何,REST API不应该通过在浏览器地址栏中键入端点来使用。

最常见的情况是您的服务器使用第三方REST API。

为此,您的服务器端代码需要构造一个适当的GET(/PUT/POST/DELETE)请求,指向给定的端点(URL),设置一些标头(如果需要,例如您的情况),最后(也许)发送一些数据(通常发生在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命令指令设置一个头和其值。


4
另一种测试不同请求标头值的方法是下载并使用Postman客户端。它需要一些设置,但适用于测试REST API。 - Xchai

7
这是一个方便的网站,可以测试您的标头。您可以查看浏览器标头,并使用cURL反射回发送的任何标头。
例如,您可以像这样验证内容协商。
接受标头更喜欢纯文本,因此以该格式返回:
$ 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"
}

4

通常我使用Fiddler或Postman测试API。

在Fiddler中,在请求头中,您需要指定应该将内容更改为json而不是xml或html。例如:Accept: application/json。那就可以了。


0
如果是使用Postman,需要添加明确的头信息,键为"accept",值为"application/json"。

enter image description here


-5

对于JSON表示,Curl可能是更好的选择,但在这种情况下,由于它是在命令行中进行操作,因此很难理解JSON的结构。 如果您想要在浏览器上获取JSON,则可以简单地删除所有 XML注释,例如:

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

从您的模型类中获取数据,然后运行与 XML 表示相同的 URL。

确保您的 pom.xml 文件中有 jacson-databind 依赖项。

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

1
为什么您认为 OP 在使用 Java? - cassiomolin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接