REST API - 使用“接受:应用程序/json”HTTP 标头

Posted

技术标签:

【中文标题】REST API - 使用“接受:应用程序/json”HTTP 标头【英文标题】:REST API - Use the "Accept: application/json" HTTP Header 【发布时间】:2017-08-29 19:30:20 【问题描述】:

当我发出请求时,我会收到 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

【问题讨论】:

你是如何发送请求的? 这可以帮助你理解:***.com/documentation/rest/1664/… 【参考方案1】:

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

在fiddler中,在request header中你需要指定而不是xml,你需要将html改为json。 例如:Accept: application/json。这应该可以完成工作。

【讨论】:

【参考方案2】:

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

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

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

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

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

如果您想测试 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 指令设置标头及其值。

【讨论】:

另一种测试不同请求标头值的方法是下载和使用 Postman 客户端。它需要一些设置,但用于测试 REST API。【参考方案3】:

这是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"

【讨论】:

【参考方案4】:

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

@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>

【讨论】:

你为什么认为 OP 使用的是 Java?

以上是关于REST API - 使用“接受:应用程序/json”HTTP 标头的主要内容,如果未能解决你的问题,请参考以下文章

如果 REST 控制器类和接口具有使用 @HystrixCommand 注释的 API,则不会加载所有 REST API

使用REST API创建api需要哪些权限?

如何在 django-rest-framework 中为 API 使用 TokenAuthentication

Wordpress REST API (wp-api) 404 错误:无法访问 WordPress REST API

nodejs使用Node.js实现REST Client调用REST API

使用 Camel 的 REST 服务调用需要首先调用身份验证 api