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

问题描述 投票:0回答:5

当我发出请求时,我得到了 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
json rest request-headers
5个回答
103
投票

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

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

最常见的场景是你的服务器消费第三方REST Api。

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

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

如果您想test REST Api,您可以使用命令行中的

curl
工具。

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

在您的情况下,测试请求将像这样发出:

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


7
投票

这里有一个方便的网站,可以测试您的标题。你可以看到你的浏览器标头,也可以使用 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"
}

3
投票

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

fiddler中,request header中需要指定的不是xml,html需要改成json。 例如:

Accept: application/json
。那应该做的工作。


0
投票

如果是邮递员,添加显式标题 key = "accept", value = "application/json"


-5
投票

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

@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>
© www.soinside.com 2019 - 2024. All rights reserved.